在我的上一个项目中,我决定使用实体框架,直到我尝试使用“where in”获取数据时一切顺利。我收到了错误。
经过微小的搜索后,我提出了this post和that post。
这就是我想要做的事情
var all = fooelements
.Where(l=>controlsToGet
.Contains(l.Control.Name));
是否有任何处理它与lambda表达式或linq与实体框架?
谢谢
答案 0 :(得分:3)
在前一个答案的基础上,我有一个提示,可以在这里轻松完成:
Tip 8 - How to write 'WHERE IN' style queries using LINQ to Entities
希望这有帮助
亚历克斯詹姆斯项目经理 - 实体框架小组
答案 1 :(得分:1)
我不知道用EF生成WHERE IN
子句的方法,但您可以使用表达式树构建一个WHERE
子句来测试您的每个值:
Expression<Func<FooEntity, bool>> seed = l => false;
var predicate = controlsToGet.Aggregate(seed,
(e, c) => Expression.Lambda<Func<DataEventAttribute, bool>>(
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 )