0

次の(簡略化された)Entity 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 }

しかし、私はよりエレガントなソリューションを望んでいました。

4

1 に答える 1

0

おっと、あなたは Entity SQL を直接書いています。なるほど... Entity SQL を手で書くのではなく、DbSet を使用しない理由はありますか? いつもできる

var statuses = new [] { Status.A, Status.B };
var query = context.SomeTable.Where(a => !statuses.Contains(a.Status)).ToList();
于 2016-08-01T16:21:20.710 に答える