本篇讲解的内容有:

  1. 使用where筛选过滤LINQ查询
  2. 带逻辑的where筛选
  3. 多个where筛选子句

【1.使用where筛选过滤LINQ查询】

  通常一个LINQ查询不会如前面的示例代码这么简单,经常还需要对数据源中的元素进行过滤。只有符合条件的元素,才能参与查询结果的计算。

  在LINQ中,用where子句指定查询的过滤条件,它的格式如下:

 where expression

  其中,expression是一个逻辑表达式,返回布尔值“真”或“假”。

  当被查询的元素参与表达式运算返回结果为“真”时,该元素参与查询结果运算。

【2.带条件的where筛选】

  where子句中的条件表达式,可以用&&||指定多个条件的逻辑运算关系。其中,&&表示逻辑并,||表示逻辑或。他们的计算关系如下表:

where子句中的逻辑操作
    exp1         exp2     exp1&&exp2 exp1||exp2

  如下列代码:

  • 查询query1采用最简单的where子句条件,查询数组nums中所有大于15的元素。
  • 查询query2在where子句的条件中使用&&运算,查询数组nums中大于10且小于40的元素。
  • 查询query3在where子句的条件中使用||运算,查询数组nums中小于10或大于40的元素。
         static void Main(string[] args)
         {
             , , , , , , , , , ,  };   // 创建int数组nums作为数据源
             // 查询query1返回nums中所有大于15的元素
             var query1 =
             (
                 from numItem in nums

                 select numItem
             );
             // 打印query1的数据
             foreach (var item in query1)
             {
                 Console.Write("{0}, ", item);
             }
             Console.WriteLine();

             // 查询query2返回nums中所有大于10且小于40的元素,演示&&的使用
             var query2 =
             (
                 from numItem in nums
                 ) && (numItem < )
                 select numItem
             );
             // 打印query2中的数据
             foreach (var item in query2)
             {
                 Console.Write("{0}, ", item);
             }
             Console.WriteLine();

             // 查询query3返回nums中所有小于0或大于40的元素,演示||的使用
             var query3 =
             (
                 from numItem in nums
                 ) || (numItem > )
                 select numItem
             );
             // 打印query3中的元素
             foreach (var item in query3)
             {
                 Console.Write("{0}, ", item);
             }
             Console.WriteLine();
         }

  运行结果如下:

【3.多个where筛选子句】

  另外,在同一个LINQ查询中,还可以使用多个并列的where子句来进行多个条件过滤。数据源中的元素只有同时满足所有where子句的条件才能作为查询结果。

  这样,可以将上面的代码中,query2等价写成下面query4的形式:

  // 查询query4返回nums中所有大于10且小于40的元素,演示多个where子句的使用
  var query4 =
  (
      from numItem in nums

      select numItem
  );

  上面的代码,只有同时满足两个where子句中的条件,才会作为查询结果。

技巧:where子句中的条件尽量简短易懂,并且还可以通过函数等方法来提供判断条件,当出现多个逻辑并(&&运算)的条件是,可以考虑使用多个并列的where子句代替。

内容参考:

《精通C#5.0与.NET 4.5高级编程——LINQ、WCF、WPF和WF》

2.4 LINQ中使用where子句指定筛选条件的更多相关文章

  1. 2.2 LINQ中使用from子句指定数据源

    数据源是LINQ查询中必不可少的元素,数据源是实现泛型接口IEnumerable<T>或IQueryable<T>的类对象. 可以将IEnumerable<T>简单 ...

  2. 2.3 LINQ查询表达式中 使用select子句 指定目标数据

    本篇讲解LINQ查询的三种形式: 查询对象 自定义查询对象某个属性 查询匿名类型结果 [1.查询结果返回集合元素] 在LINQ查询中,select子句和from子句都是必备子句.LINQ查询表达式必须 ...

  3. linq中如何合并多个predicate条件

    最近在做一个webAPI 的时候遇到一个需要合并多个predicate条件的问题,下面就是对题的情况.为了方便交流我对case进行了简化,请先看如下代码: using System.Collectio ...

  4. Linq 学习——将List集合作为筛选条件查询数据

    例: A表是一个List集合,B表也是一个List集合 .A与B有一个共同的字段 RecognitionCarCode B表通过RecognitionCarCode去重后拿到两个值{'1','2'}记 ...

  5. Linq 中查询一个表中指定的字段

    //Linq中查询一个表中指定的几个字段: ); // FindAllItems()为查询对应表的所有数据的方法: // Where 里面为查询条件 // Select 为查询的筛选条件 new{} ...

  6. Linq中关键字的作用及用法

    Linq中关键字的作用及用法 1.All:确定序列中的所有元素是否都满足条件.如果源序列中的每个元素都通过指定谓词中的测试,或者序列为空,则为 true:否则为 false. Demo: 此示例使用 ...

  7. LINQ中的一些查询语句格式

    LINQ的基本格式如下所示:var <变量> = from <项目> in <数据源> where <表达式> orderby <表达式> ...

  8. C#编程(六十一)------------LINQ中的扩展方法

    原文链接: http://blog.csdn.net/shanyongxu/article/details/47208401 LINQ中的扩展方法 LINQ中where扩展方法,要想使用,必须导入us ...

  9. LINQ查询表达式---------join子句

    LINQ查询表达式---------join子句 join 子句接受两个源序列作为输入. 每个序列中的元素都必须是可以与另一个序列中的相应属性进行比较的属性,或者包含一个这样的属性. join子句使用 ...

随机推荐

  1. IOS获得各种文档文件夹路径的方法

    iphone沙箱模型的有四个目录,各自是什么,永久数据存储一般放在什么位置.得到模拟器的路径的简单方式是什么. documents,tmp.app,Library. (NSHomeDirectory( ...

  2. (大数据工程师学习路径)第二步 Vim编辑器----高级功能入门

    一.多文件编辑 1.使用vim编辑多个文件 编辑多个文件有两种形式,一种是在进入vim前使用的参数就是多个文件.另一种就是进入vim后再编辑其他的文件. 同时创建两个新文件并编辑 $ vim 1.tx ...

  3. POJ 2762 Going from u to v or from v to u?(强连通分量+拓扑排序)

    职务地址:id=2762">POJ 2762 先缩小点.进而推断网络拓扑结构是否每个号码1(排序我是想不出来这点的. .. ).由于假如有一层为2的话,那么从此之后这两个岔路的点就不可 ...

  4. linux(fedora) 下dvwa 建筑环境

    linux(fedora)下dvwa组态 1.下载httpd,dvwa,mysql,mysqlserver, php-mysql,php 除了dvwa 这是外界进入下一官方网站.该服务通过休息inst ...

  5. swift 笔记 (七) —— 关闭

    关闭 封闭件是从包括以下各项的组.它可以在代码被发送"片"... 行,不纠结的定义.继续. swift的闭包,有点像C和Objective-C语言里的 代码块 {--}  闭包能够 ...

  6. python基础课程_学习笔记21:文件和材料

    文件和材料 打开文件 open功能是用来打开文件,语法例如,下面的: open([name[,mode[,buffering]]) open函数使用一个文件名称作为唯一的强制參数,然后返回一个文件对象 ...

  7. hdu 1426 Sudoku Killer ( Dancing Link 精确覆盖 )

    利用 Dancing Link 来解数独 详细的能够看    lrj 的训练指南 和 < Dancing Links 在搜索中的应用 >这篇论文 Dancing Link 来求解数独 , ...

  8. EJBCA于Linux安装在

    于windows为了测试安装,装在linuxserver因为CN使用ip需要重新加载.....再折腾.这里有一些地方需要注意 一.所需文件 内容准备不说,请参阅我在以前的文章<EJBCA于win ...

  9. SOA(面向服务的架构)

    前言:SOA(面向服务的架构)是目前企业应用开发过程中普遍采用的技术,基于MVC WebAPI三层分布式框架开发,以此适用于企业信息系统的业务处理,是本文论述的重点.此外,插件技术的应用,富客户端JQ ...

  10. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) ...