如何在实体sql

时间:2016-07-25 11:26:00

标签: entity-framework-6 ef-database-first entity-sql

我有以下(简化的)实体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 }

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

1 个答案:

答案 0 :(得分:0)

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

var statuses = new [] { Status.A, Status.B };
var query = context.SomeTable.Where(a => !statuses.Contains(a.Status)).ToList();