簡體   English   中英

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

[英]How to do an “in” query in entity framework?

如何在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);

不幸的是,EF無法翻譯其他人建議的查詢。 因此,雖然這些查詢可以在LINQ to Objects中使用,但它們不能在LINQ to Entities中工作。

所以解決方案涉及的更多一點。

不過,我在這里有關於這個確切主題的博客文章。 本質上,解決方案是使用一點表達式樹魔術來構建一個大的OR表達式。

希望這可以幫助

亞歷克斯

暫無
暫無

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

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