我有一个类(由我的数据库中的EF构建),它有一个标志字段.该字段作为名为CategoryEnum的列中的int存储在数据库中.我有一个枚举,指定标志的允许值:
[Flags]
public enum RuleCategories
{
None = 0x0000,
ApplicantBased = 0x0001,
LocationBased = 0x0002,
PolicyBased = 0x0004,
PropertyBased = 0x0008
}
Run Code Online (Sandbox Code Playgroud)
当我尝试使用LINQ to Entities检索对象时
var allRules = from r in context.Rules
where ((r.CategoryEnum & (int)categories) != 0)
select r;
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
无法创建"闭包类型"类型的常量值.在此上下文中仅支持原始类型(例如Int32,String和Guid').
或者,如果我尝试将实体值转换为枚举
var allRules = from r in context.Rules
where (((RuleCategories)r.CategoryEnum & categories) != 0)
select r;
Run Code Online (Sandbox Code Playgroud)
我得到一个不同的错误:
无法将类型'System.Int32'强制转换为类型RuleCategories'.LINQ to Entities仅支持转换实体数据模型基元类型.
如何根据标志选择实体?
谢谢
我猜想你说你使用的是旧的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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1135 次 |
| 最近记录: |