[英]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.