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

发布于 2024-08-03 10:40:01 字数 610 浏览 6 评论 0原文

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

经过一番小小的搜索后,我想出了 这篇文章该帖子

这就是我正在尝试做的事情

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

是否可以使用 lambda 表达式或 linq 与实体框架来处理它?

谢谢

In my last project i decided to use Entity Framework and it was all going well until i try to get datas with "where in", i got an error.

After a tiny search i ve come up with this post and that post.

This is what i am trying to do

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

Is there any to handle it with lambda expressions or linq with the Entity Framework ?

Thank you

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

琉璃梦幻 2024-08-10 10:40:01

基于之前的答案,我有一个技巧可以让您轻松地在此处执行此操作:

提示 8 - 如何使用 LINQ to Entities 编写“WHERE IN”样式查询

希望这对

Alex James

程序 有帮助经理 - 实体框架团队

实体框架提示

Building upon the previous answer I have a tip that makes it easy to do this here:

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

Hope this helps

Alex James

Program Manager - Entity Framework Team

Entity Framework Tips

赠我空喜 2024-08-10 10:40:01

我不知道如何使用 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);

如果打印出谓词,您应该看到如下表达式:

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

I don't know of a way to generate a WHERE IN clause with EF, but you can use expression trees to construct a WHERE clause that will test for each of your values:

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

If you print out predicate, you should see an expression like this:

l => ((l.Control.Name = ctrl5) || l.Control.Name = ctrl4 || ... || False )
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文