0

我有以下(简化的)实体 SQL 查询:

SELECT VALUE a
FROM Customers AS a
WHERE a.Status NOT IN { 2, 3 }

Status属性是一个枚举类型,称它为CustomerStatus。枚举在 EDMX 文件中定义。

事实上,这个查询不起作用,抛出一个异常,即 CustomerStatus 与 Int32 不兼容(其基础类型int)。但是,我找不到为IN {}子句定义 CustomerStatus 值列表的方法,无论我在枚举名称前面加上什么命名空间。例如,

SELECT VALUE a
FROM Customers AS a
WHERE a.Status NOT IN { MyModelEntities.CustomerStatus.Reject, MyModelEntities.CustomerStatus.Accept }

没用,抛出一个异常,说它在容器中找不到 MyModelEntities.CustomerStatus 或类似的东西。

最终我求助于将 int 强制转换Status为 int,例如

SELECT VALUE a
FROM Customers AS a
WHERE CAST(a.Status AS System.Int32) NOT IN { 2, 3 }

但我希望有一个更优雅的解决方案。

4

1 回答 1

0

哦,您正在直接编写实体 SQL。我明白了...您不使用 DbSet 而不是手动编写 Entity SQL 的任何原因?总能做到

var statuses = new [] { Status.A, Status.B };
var query = context.SomeTable.Where(a => !statuses.Contains(a.Status)).ToList();
于 2016-08-01T16:21:20.710 回答