实体框架中的集合值参数?

时间:2009-08-26 15:52:02

标签: c# linq entity-framework lambda

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

经过微小的搜索后,我提出了this postthat post

这就是我想要做的事情

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

是否有任何处理它与lambda表达式或linq与实体框架?

谢谢

2 个答案:

答案 0 :(得分:3)

在前一个答案的基础上,我有一个提示,可以在这里轻松完成:

Tip 8 - How to write 'WHERE IN' style queries using LINQ to Entities

希望这有帮助

亚历克斯詹姆斯

项目经理 - 实体框架小组

Entity Framework Tips

答案 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 )