更新:2007 年 11 月
where 子句用在查询表达式中,用于指定将在查询表达式中返回数据源中的哪些元素。它将一个布尔条件(“谓词”)应用于每个源元素(由范围变量引用),并返回满足指定条件的元素。一个查询表达式可以包含多个 where 子句,一个子句可以包含多个谓词子表达式。
示例
在下面的示例中,where 子句筛选出除小于五的数字外的所有数字。如果移除 where 子句,则会返回数据源中的所有数字。表达式 num < 5 是应用于每个元素的谓词。
C# | 复制代码 |
---|---|
class WhereSample { static void Main() { // Simple data source. Arrays support IEnumerable<T>. int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; // Simple query with one predicate in where clause. var queryLowNums = from num in numbers where num < 5 select num; // Execute the query. foreach (var s in queryLowNums) { Console.Write(s.ToString() + " "); } } } //Output: 4 1 3 2 0 |
在单一 where 子句内,可以使用
C# | 复制代码 |
---|---|
class WhereSample2 { static void Main() { // Data source. int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; // Create the query with two predicates in where clause. var queryLowNums2 = from num in numbers where num < 5 && num % 2 == 0 select num; // Execute the query foreach (var s in queryLowNums2) { Console.Write(s.ToString() + " "); } } } // Output: 4 2 0 |
where 子句可以包含一个或多个返回布尔值的方法。在下面的示例中,where 子句使用一个方法来确定范围变量的当前值是偶数还是奇数。
C# | 复制代码 |
---|---|
class WhereSample3 { static void Main() { // Data source int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; // Create the query with a method call in the where clause. // Note: This won't work in LINQ to SQL unless you have a // stored procedure that is mapped to a method by this name. var queryEvenNums = from num in numbers where IsEven(num) select num; // Execute the query. foreach (var s in queryEvenNums) { Console.Write(s.ToString() + " "); } } // Method may be instance method or static method. static bool IsEven(int i) { return i % 2 == 0; } } //Output: 4 8 6 2 0 |
备注
where 子句是一种筛选机制。除了不能是第一个或最后一个子句外,它几乎可以放在查询表达式中的任何位置。where 子句可以出现在
如果指定的谓词对于数据源中的元素无效,则会发生编译时错误。这是 LINQ 提供的强类型检查的一个优点。
编译时,where 关键字会被转换为对