2010-07-09 5 views
3

플래그가있는 필드가있는 클래스가 있습니다 (데이터베이스에서 EF로 작성). 필드는 CategoryEnum이라는 열에 int로 데이터베이스에 저장됩니다.Entity Framework에서 플래그 사용 Where 절

수 없습니다 것은 만들 :

[Flags] 
public enum RuleCategories 
{ 
    None = 0x0000, 
    ApplicantBased = 0x0001, 
    LocationBased = 0x0002, 
    PolicyBased = 0x0004, 
    PropertyBased = 0x0008 
} 

내가 엔티티에 LINQ를 사용하여 객체를 검색하려고

var allRules = from r in context.Rules 
       where ((r.CategoryEnum & (int)categories) != 0) 
       select r; 

내가이 오류 : 나는 플래그의 허용 값을 지정하는 열거를 'Closure type'타입의 상수 값. 이 컨텍스트에서는 원시 형식 (예 : 'Int32, String 및 Guid') 만 지원됩니다.

또는, 내가 다른 오류가 열거

var allRules = from r in context.Rules 
       where (((RuleCategories)r.CategoryEnum & categories) != 0) 
       select r; 

에 엔티티 값을 캐스팅해야 할 경우 :

'RuleCategories를 입력 할 유형'선택 System.Int32 '를 캐스팅 할 수 없습니다. 엔터티에 대한 LINQ는 엔터티 데이터 모델 기본 형식을 캐스팅하는 기능 만 지원합니다.

플래그를 기반으로 엔티티를 어떻게 선택합니까?

감사

답변

5

나는 추측 가고 당신이 좋은 오래된 EF 3.5을 사용하고 있다는 말을하고있다. 이것은 VS2010의 EF 4.0에 문제없이 작동합니다. 그러나 3.5 버전에는 문제가 있으며 해결 방법을 사용해야합니다. 쿼리 전에 intcategories 변수 캐스트, 다음 쿼리 자체 내부에 int 변수를 사용

int preCastCategories = (int)categories; 
var allRules = from r in context.Rules 
       where ((r.CategoryEnum & preCastCategories) != 0) 
       select r;