2.4 LINQ中使用where子句指定筛选条件

时间:2020-12-25 20:10:44

 

本篇讲解的内容有:

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

 

 

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

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

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

1 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的元素。
 1         static void Main(string[] args)
 2         {
 3             int[] nums = { 1, 3, 9, 54, 20, 10, 23, 12, 18, 60, 37 };   // 创建int数组nums作为数据源
 4             // 查询query1返回nums中所有大于15的元素
 5             var query1 =
 6             (
 7                 from numItem in nums
 8                 where numItem > 15
 9                 select numItem
10             );
11             // 打印query1的数据
12             foreach (var item in query1)
13             {
14                 Console.Write("{0}, ", item);
15             }
16             Console.WriteLine();
17 
18             // 查询query2返回nums中所有大于10且小于40的元素,演示&&的使用
19             var query2 =
20             (
21                 from numItem in nums
22                 where (numItem > 10) && (numItem < 40)
23                 select numItem
24             );
25             // 打印query2中的数据
26             foreach (var item in query2)
27             {
28                 Console.Write("{0}, ", item);
29             }
30             Console.WriteLine();
31 
32             // 查询query3返回nums中所有小于0或大于40的元素,演示||的使用
33             var query3 =
34             (
35                 from numItem in nums
36                 where (numItem < 10) || (numItem > 40)
37                 select numItem
38             );
39             // 打印query3中的元素
40             foreach (var item in query3)
41             {
42                 Console.Write("{0}, ", item);
43             }
44             Console.WriteLine();
45         }

  运行结果如下:

2.4 LINQ中使用where子句指定筛选条件

 

 

 

【3.多个where筛选子句】

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

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

1  // 查询query4返回nums中所有大于10且小于40的元素,演示多个where子句的使用
2  var query4 =
3  (
4      from numItem in nums
5      where numItem > 10
6      where numItem < 40
7      select numItem
8  );

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

 

 

 

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

 

 

 

内容参考:

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