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 )