如何在Linq to Entities查询中使用标记枚举?

Vas*_*aga 4 .net linq enums flags

我有这样的[Flags]枚举:

[Flags]
public enum Status
{
  None = 0,
  Active = 1,
  Inactive = 2,
  Unknown = 4
}
Run Code Online (Sandbox Code Playgroud)

状态枚举可能包含两个值,例如:

Status s = Status.Active | Status.Unknown;
Run Code Online (Sandbox Code Playgroud)

现在我需要创建一个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
Run Code Online (Sandbox Code Playgroud)

当然我得到一个错误,因为LINQ to Entities只知道在Where子句中处理原始类型.

错误是:

无法创建"闭包类型"类型的常量值.在此上下文中仅支持原始类型(例如Int32,String和Guid').

有可行的方法吗?我可能有一个状态枚举,有10个可能的值,并查询5个状态.如何以优雅的方式使用Flags枚举构造查询?

谢谢.

更新

这似乎是一个Linq to Entities问题.我认为在LINQ to SQL中它可以工作(不确定,没有经过测试).

Eat*_*oes 6

只是用 HasFlag()

var result = from r in db.Records
         where r.Status.HasFlag(s)
         select r
Run Code Online (Sandbox Code Playgroud)


eri*_*len 0

我不知道 EF,但是插入额外的演员表可以工作吗?

var result = from r in db.Records
             where ((byte)r.Status & (byte)s) == (byte)r.Status
             select r
Run Code Online (Sandbox Code Playgroud)