查询语法和方法语法

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

C#:

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

// Query syntax:
IEnumerable<int> numQuery1 =
            from num in numbers
            where num % 2 == 0
            orderby num
            select num;

// Method syntax:
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();