エンティティフレームワークで "in"クエリを実行する方法

.net c# entity-framework linq

質問

リストからキーを持つ行を選択するために、エンティティに対してlinqでselectを実行するにはどうすればよいですか。このようなもの:

var orderKeys = new int[] { 1, 12, 306, 284, 50047};
var orders = (from order in context.Orders 
              where (order.Key in orderKeys) 
              select order).ToList();
Assert.AreEqual(orderKeys.Count, orders.Count);

いくつかの回答で述べたようにContainsメソッドを使用しようとしましたが、うまくいかず、この例外がスローされます。

LINQ to Entitiesはメソッド 'Boolean Contains [Int32](System.Collections.Generic.IEnumerable`1 [System.Int32]、Int32)'メソッドを認識しないため、このメソッドをストア式に変換することはできません。

受け入れられた回答

これを試して:

var orderKeys = new int[] { 1, 12, 306, 284, 50047};
var orders = (from order in context.Orders 
              where orderKeys.Contains(order.Key);
              select order).ToList();
Assert.AreEqual(orderKeys.Count, orders.Count);

編集:私はこの問題に対するいくつかの回避策を見つけました - WHERE IN句を見てください

Entity Frameworkは現在、コレクション値パラメーター(この例では 'statusesToFind')をサポートしていません。この制限を回避するには、次のユーティリティメソッドを使用して一連の値を指定して式を手動で作成します。


人気のある回答

私は同じ問題を抱えていて、私はこのように解決しました

var orderKeys = new int[] { 1, 12, 306, 284, 50047};
var orders = (from order in context.Orders 
              where (orderKeys.Contains(order.Key)) 
              select order).ToList();
Assert.AreEqual(orderKeys.Count, orders.Count);


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ