如何在實體框架中進行“in”查詢?

.net c# entity-framework linq

如何在linq中選擇實體來從列表中選擇帶有鍵的行?像這樣的東西:

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子句?

實體框架目前不支持集合值參數(在您的示例中為“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合法嗎? 是的,了解原因