entity framework的集合值参数?

在我的上一个项目中,我决定使用entity framework,直到我尝试使用“where in”获取数据时一切顺利,我收到了错误。

经过一番小小的搜索,我发现了这篇文章和post 。

这就是我想要做的

var all = fooelements .Where(l=>controlsToGet .Contains(l.Control.Name)); 

是否有任何处理它与lambda表达式或linq与entity framework?

谢谢

在前面的答案的基础上,我有一个提示,可以很容易地在这里做到这一点:

技巧8 – 如何使用LINQ to Entities编写’WHERE IN’样式查询

希望这可以帮助

Alex James

项目经理 – entity framework团队

entity framework提示

我不知道用EF生成WHERE IN子句的方法,但是您可以使用表达式树来构造一个WHERE子句来测试每个值:

  Expression> seed = l => false; var predicate = controlsToGet.Aggregate(seed, (e, c) => Expression.Lambda>( Expression.OrElse( Expression.Equal( Expression.Property( Expression.Property( e.Parameters[0], "Control"), "Name"), Expression.Constant(c)), e.Body), e.Parameters)); var all = fooelements.Where(predicate); 

如果你打印predicate ,你应该看到这样的表达式:

 l => ((l.Control.Name = ctrl5) || l.Control.Name = ctrl4 || ... || False )