当前位置:  开发笔记 > 数据库 > 正文

LINQ是否支持可组合"或查询"?

如何解决《LINQ是否支持可组合"或查询"?》经验,为你挑选了1个好方法。

在另一篇文章中:Linq-To-Sql是否支持可组合查询,讨论了如何动态组合/连接where子句.这似乎是用"AND"完成的(即第一个where子句和第二个where子句由AND连接).我想知道的是,是否有办法用OR组合Linq查询.

例:

var people = from p in Person
             where p.age < 18
             select p

var otherPeople = from p in people
                  where p.firstName equals "Daniel"
                  select p

这给人们起名为"丹尼尔"并且未满18岁.我正在寻找加入这些名称的语法,以找到名字为"丹尼尔"或未满18岁的人.

注意:我正在使用ADO.net数据服务,所以我没有.Contains()可供我使用.

编辑:联盟建议(由Garry Shutler)正是我正在寻找的功能方面.我确实遇到了两个可能的问题:

    如果我要做第三个条件(联合似乎将IEnumerable作为其参数),它看起来会产生多个数据库命中 - 我希望在代码中构建多个AND和OR语句然后执行一个请求.

    ADO.Net数据服务不支持Union(非常令人失望)

Garry Shutle.. 6

你想要的就像:

var people = from p in Person
             where p.age < 18 || p.firstName == "Daniel"
             select p;

或者你刚才举了一个简单的例子?

在这种情况下,您可以使用:

var under18 = from p in Person
              where p.age < 18
              select p;

var daniels = from p in Person
              where p.firstName == "Daniel"
              select p;

var combined = under18.Union(daniels);

LinqToSql可能足够智能,可以将其转换为OR,但我不太确定.



1> Garry Shutle..:

你想要的就像:

var people = from p in Person
             where p.age < 18 || p.firstName == "Daniel"
             select p;

或者你刚才举了一个简单的例子?

在这种情况下,您可以使用:

var under18 = from p in Person
              where p.age < 18
              select p;

var daniels = from p in Person
              where p.firstName == "Daniel"
              select p;

var combined = under18.Union(daniels);

LinqToSql可能足够智能,可以将其转换为OR,但我不太确定.

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有