簡體   English   中英

如何在實體SQL中引用枚舉類型

[英]How to reference enum type in 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 }

但我希望有一個更優雅的解決方案。

噢,您正在直接編寫實體SQL。 我明白了。有什么理由不使用DbSet而不是手工編寫Entity SQL? 總是可以做

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM