如何在实体框架中进行“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);



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因