linq 查询语法和方法语法

示例

查询语法和方法语法在语义上是相同的,但是许多人发现查询语法更简单易读。假设我们需要从一组数字中检索升序排列的所有偶数项。

C#:

int[] numbers = { 0, 1, 2, 3, 4, 5, 6 };

// 查询语法:
IEnumerable<int> numQuery1 =
            from num in numbers
            where num % 2 == 0
            orderby num
            select num;

// 方法语法:
IEnumerable<int> numQuery2 = numbers.Where(num => num % 2 == 0).OrderBy(n => n);

VB.NET:

Dim numbers() As Integer = { 0, 1, 2, 3, 4, 5, 6 }

' Query syntax: '
Dim numQuery1 = From num In numbers
                 Where num Mod 2 = 0
                 Select num
                 Order By num

' Method syntax: '
Dim numQuery2 = numbers.where(Function(num) num Mod 2 = 0).OrderBy(Function(num) num)

请记住,某些查询必须表示为方法调用。例如,您必须使用方法调用来表达查询,该查询检索与指定条件匹配的元素数量。您还必须对查询使用方法调用,以检索源序列中具有最大值的元素。因此使用方法语法使代码更一致可能是一个优点。但是,当然,您始终可以在查询语法调用之后应用该方法:

C#:

int maxNum =
    (from num in numbers
     where num % 2 == 0
     select num).Max();

VB.NET:

Dim maxNum =
    (From num In numbers
     Where num Mod 2 = 0
     Select num).Max();