我正在使用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.
有什么想法吗?
答案 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