1

我正在使用 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.

有任何想法吗?

4

1 回答 1

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 对 List 的处理与 byte[] 不同。

请参阅:.NET Entity Framework - 使用 .Contains() 在 Where 表达式中查找字节值

于 2013-06-12T17:53:59.997 回答