我有以下的(简化)实体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 }
,但我希望一个更优雅的解决方案。
你不能在发送查询之前将枚举强制转换为(int)吗? –
@DanielLorenz你是什么意思?正如你在上一个查询中看到的,最终这就是我所做的。 –
你是自己构建SQL还是使用DbSet?如果您自己构建SQL,则必须使用int,因为数据库没有枚举的概念。 EF将其转换为int。 –