我有以下(简化的)实体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,或者其他一些。
最终我使用Status
转换为int,例如
SELECT VALUE a
FROM Customers AS a
WHERE CAST(a.Status AS System.Int32) NOT IN { 2, 3 }
但我希望有一个更优雅的解决方案。
答案 0 :(得分:0)
哦,您正在直接编写实体SQL。我明白了...你有没有使用DbSet而不是手工编写实体SQL的原因?总能做到
var statuses = new [] { Status.A, Status.B };
var query = context.SomeTable.Where(a => !statuses.Contains(a.Status)).ToList();