如何在entity framework中进行“in”查询?

我如何做一个select在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方法,但它不起作用,并引发此exception:

LINQ to Entities不识别方法'布尔包含[Int32](System.Collections.Generic.IEnumerable`1 [System.Int32],Int32)'方法,并且此方法不能转换为存储expression式。

尝试这个:

 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); 

编辑:我已经find了这个问题的一些解决方法 – 请参阅WHERE IN子句? :

entity framework当前不支持集合值参数(在您的示例中为“statusesToFind”)。 要解决此限制,可以使用以下实用程序方法手动构build给定值序列的expression式:

我有同样的问题,我解决这个问题

 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中不起作用。

所以解决scheme有一点涉及。

不过,我有一个关于这个确切的话题的博客文章。 本质上来说,解决scheme是使用一点expression式树魔法来构build一个大的ORexpression式。

希望这可以帮助

亚历克斯