2.4 LINQ中使用where子句指定筛选条件
本篇讲解的内容有:
【1.使用where筛选过滤LINQ查询】
通常一个LINQ查询不会如前面的示例代码这么简单,经常还需要对数据源中的元素进行过滤。只有符合条件的元素,才能参与查询结果的计算。
在LINQ中,用where子句指定查询的过滤条件,它的格式如下:
where expression
其中,expression是一个逻辑表达式,返回布尔值“真”或“假”。
当被查询的元素参与表达式运算返回结果为“真”时,该元素参与查询结果运算。
【2.带条件的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子句指定筛选条件的更多相关文章
- 2.2 LINQ中使用from子句指定数据源
数据源是LINQ查询中必不可少的元素,数据源是实现泛型接口IEnumerable<T>或IQueryable<T>的类对象. 可以将IEnumerable<T>简单 ...
- 2.3 LINQ查询表达式中 使用select子句 指定目标数据
本篇讲解LINQ查询的三种形式: 查询对象 自定义查询对象某个属性 查询匿名类型结果 [1.查询结果返回集合元素] 在LINQ查询中,select子句和from子句都是必备子句.LINQ查询表达式必须 ...
- linq中如何合并多个predicate条件
最近在做一个webAPI 的时候遇到一个需要合并多个predicate条件的问题,下面就是对题的情况.为了方便交流我对case进行了简化,请先看如下代码: using System.Collectio ...
- Linq 学习——将List集合作为筛选条件查询数据
例: A表是一个List集合,B表也是一个List集合 .A与B有一个共同的字段 RecognitionCarCode B表通过RecognitionCarCode去重后拿到两个值{'1','2'}记 ...
- Linq 中查询一个表中指定的字段
//Linq中查询一个表中指定的几个字段: ); // FindAllItems()为查询对应表的所有数据的方法: // Where 里面为查询条件 // Select 为查询的筛选条件 new{} ...
- Linq中关键字的作用及用法
Linq中关键字的作用及用法 1.All:确定序列中的所有元素是否都满足条件.如果源序列中的每个元素都通过指定谓词中的测试,或者序列为空,则为 true:否则为 false. Demo: 此示例使用 ...
- LINQ中的一些查询语句格式
LINQ的基本格式如下所示:var <变量> = from <项目> in <数据源> where <表达式> orderby <表达式> ...
- C#编程(六十一)------------LINQ中的扩展方法
原文链接: http://blog.csdn.net/shanyongxu/article/details/47208401 LINQ中的扩展方法 LINQ中where扩展方法,要想使用,必须导入us ...
- LINQ查询表达式---------join子句
LINQ查询表达式---------join子句 join 子句接受两个源序列作为输入. 每个序列中的元素都必须是可以与另一个序列中的相应属性进行比较的属性,或者包含一个这样的属性. join子句使用 ...
随机推荐
- 初探boost之progress_display库学习笔记
progress_display 用途 progress_display能够在控制台上显示程序的运行进度,假设程序运行非常耗费时间,那么它能提供一个友好的用户界 面,不至于让用户在等待中失去耐心,甚至 ...
- C#中实现并发
C#中实现并发的几种方法的性能测试 0x00 起因 去年写的一个程序因为需要在局域网发送消息支持一些命令和简单数据的传输,所以写了一个C/S的通信模块.当时的做法很简单,服务端等待链接,有用户接入后开 ...
- java中 try return finally return(转)
finally块里面的代码一般都是会执行的,除非执行 System.exit(int),停止虚拟机,断电. 1.若try代码块里面有return ,假设要return 的值 是A,A为基本类型或者被f ...
- Kafka (一)
使用Kafka最新版本0.9 Kafka 配置 1. 安装 首先需要安装Java,推荐安装Java8,不然会出现一些莫名其妙的错误 kafka_2.11-0.9.0.0.tgz tar -xzf ka ...
- JS前端正则表达式学习笔记(转)
1.正则表达式的创建: 方法一:以字面量形式来创建 格式为/pattern/flags;其中pattern(模式)为任何简单或者复杂的表达式,可以包括字符类,限定符,分组,向前查找以及反向引用.每个正 ...
- 单节点伪分布式Hadoop配置
本文所用软件版本: VMware-workstation-full-11.1.0 jdk-6u45-linux-i586.bin ubuntukylin-14.04-desktop-i386.iso ...
- MVC中使用泛型仓储模式和依赖注入
在ASP.NET MVC中使用泛型仓储模式和依赖注入,实现增删查改 原文链接:http://www.codeproject.com/Articles/838097/CRUD-Operations-Us ...
- 讨厌OpenSSL
在OpenSSL心脏出血后,.我相信很多人都出了血.而流下眼泪...瞬间出现在网上了很多吐槽OpenSSL文章还是那条,窝火一刻仿佛心脏被释放出来,按照这个忙疯了,我吐在嘈杂.在这些年被雪OpenSS ...
- SQL导入txt以及SQL中的时间格式操作
原文:SQL导入txt以及SQL中的时间格式操作 MySQL中导入txt的指令为: load data local infile "路径名称" into table "表 ...
- iOS开发- 拨打电话总结
关于iOS应用拨打电话, 我所知道的有3种办法, 详细例如以下: 一.利用openURL(tel) 特点: 直接拨打, 不弹出提示. 而且, 拨打完以后, 留在通讯录中, 不返回到原来的应用. //拨 ...