在带有Entity Framework 5的where子句中使用枚举值数组

时间:2013-06-11 23:16:33

标签: entity-framework enums linq-to-entities entity-framework-5

我正在使用EF 5.我的实体有一个名为Status的属性,它是MyEntityStatus类型的枚举。

我需要进行查询,返回所有具有任何状态列表的实体。

我的基本代码如下:

var statusArray = new MyEntityStatus[]{MyEntityStatus.Status1, MyEntityStatus.Status2};
var results = myDataContext.MyEntities..Where(e => statusArray.Contains(e.Status)).ToArray();

代码编译,但EF返回以下错误:

The type 'MyEntityStatus' does not match the EDM enumeration type 'MyEntityStatus' or its underlying type 'Byte'.

如果我尝试使用字节数组而不是显式枚举类型,我会收到以下错误:

DbExpressionBinding requires an input expression with a collection ResultType.

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

从Any()切换到Contains()让我成为那里的一部分,但最终的解决方案需要使用List而不是byte []。

以下是最终的代码:

var statusArray = (new MyEntityStatus[]{MyEntityStatus.Status1, MyEntityStatus.Status2}).Cast<byte>().ToList();
var results = myDataContext.MyEntities..Where(e => statusArray.Contains((byte)e.Status)).ToArray();

显然,EF以不同于byte []的方式处理List。

请参阅:.NET Entity Framework - Using .Contains() to find a byte value in a Where expression