我有一个类(由我的数据库中的EF构建),它有一个标志字段。该字段作为名为CategoryEnum的列中的int存储在数据库中。我有一个枚举,指定标志的允许值:
[Flags]
public enum RuleCategories
{
None = 0x0000,
ApplicantBased = 0x0001,
LocationBased = 0x0002,
PolicyBased = 0x0004,
PropertyBased = 0x0008
}
当我尝试使用LINQ to Entities
检索对象时var allRules = from r in context.Rules
where ((r.CategoryEnum & (int)categories) != 0)
select r;
我收到此错误:
无法创建“闭包类型”类型的常量值。在此上下文中仅支持原始类型(例如Int32,String和Guid')。
或者,如果我尝试将实体值强制转换为枚举
var allRules = from r in context.Rules
where (((RuleCategories)r.CategoryEnum & categories) != 0)
select r;
我得到了一个不同的错误:
无法将类型'System.Int32'强制转换为类型RuleCategories'。 LINQ to Entities仅支持转换实体数据模型基元类型。
如何根据标志选择实体?
由于
答案 0 :(得分:5)
我猜想你说你使用的是旧的EF 3.5。这在VS2010中的EF 4.0没有问题。但是,3.5版本存在问题,您必须使用变通方法。在查询之前将categories
变量投射到int
,然后在查询本身内使用您的int
变量:
int preCastCategories = (int)categories;
var allRules = from r in context.Rules
where ((r.CategoryEnum & preCastCategories) != 0)
select r;