我有一个像这样的 [Flags] 枚举:
[Flags]
public enum Status
{
None = 0,
Active = 1,
Inactive = 2,
Unknown = 4
}
状态枚举可能包含两个值,例如:
Status s = Status.Active | Status.Unknown;
现在我需要创建一个 linq 查询(LINQ to ADO.NET Entities)并询问状态为 s 以上的记录,即 Active 或 Unknown;
var result = from r in db.Records
select r
where (r.Status & (byte)s) == r.Status
当然我得到一个错误,因为 LINQ to Entities 只知道在 Where 子句中处理原始类型。
错误是:
无法创建“闭包类型”类型的常量值。此上下文仅支持原始类型(“例如 Int32、String 和 Guid”)。
有没有可行的方法?我可能有一个包含 10 个可能值的状态枚举并查询其中的 5 个状态。如何以优雅的方式使用 Flags 枚举构造查询?
谢谢。
更新
这似乎是一个 Linq to Entity 问题。我认为在 LINQ to SQL 中它可以工作(不确定,没有测试)。