У меня есть следующий (упрощенный) Entity SQL-запрос:Как можно ссылаться на тип перечисления в Entity SQL
SELECT VALUE a
FROM Customers AS a
WHERE a.Status NOT IN { 2, 3 }
Свойство Status
является типом перечисления, назовем его CustomerStatus
. Перечисление определено в файле EDMX.
Как бы то ни было, этот запрос не работает, порождая исключение из-за того, что CustomerStatus несовместим с Int32 (его базовый тип - это int). Тем не менее, я не мог найти способ определить список значений CustomerStatus для предложения IN {}
независимо от того, какое пространство имен я префиксует имени перечисления. Например,
SELECT VALUE a
FROM Customers AS a
WHERE a.Status NOT IN { MyModelEntities.CustomerStatus.Reject, MyModelEntities.CustomerStatus.Accept }
не работает, выбрасывая исключение заявив, что не может найти MyModelEntities.CustomerStatus в контейнере, или некоторые такие.
В конце концов я прибегла к отливке Status
в целое, такие как
SELECT VALUE a
FROM Customers AS a
WHERE CAST(a.Status AS System.Int32) NOT IN { 2, 3 }
, но я надеялся на более элегантное решение.
Не можете ли вы просто перевести enum в (int) до отправки запроса? –
@ DanielLorenz, что вы имеете в виду? Как вы можете видеть в последнем запросе, в конце концов это то, что я сделал. –
Вы строите SQL самостоятельно или используете DbSet? Если вы сами создаете SQL, вам нужно использовать int, поскольку в базе данных нет понятия перечисления. EF переводит это значение в int. –