方法语法⚓︎
查询语法和方法语法是编写 LINQ 表达式的两种方式。介绍性的语言集成查询(LINQ)文档中的大多数查询是使用 LINQ 声明性查询语法编写的。 但是在编译代码时,查询语法必须转换为针对 .NET 公共语言运行时 (CLR) 的方法调用。 这些方法调用会调用标准查询运算符( Where
、Select
、GroupBy
、Join
、Max
和 Average
等),也可以使用方法直接调用它们,这种方式称为方法语法。
Note
查询语法和方法语法在语义上是相同的,但是查询语法更简单且更易于阅读,并且某些查询必须表示为方法调用。 例如,必须使用方法调用表示检索与指定条件匹配的元素数的查询。
下面示例展示了查询语法和方法语法的使用,它们在功能上是等效的。
class QueryVMethodSyntax
{
static void Main()
{
int[] numbers = { 5, 10, 8, 3, 6, 12};
//查询语法 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);
foreach (int i in numQuery1)
{
Console.Write(i + " ");
}
Console.WriteLine(System.Environment.NewLine);
foreach (int i in numQuery2)
{
Console.Write(i + " ");
}
}
}
/*
Output:
6 8 10 12
6 8 10 12
*/
上述示例中的输出相同,并且查询变量具有相同的类型。在查询语法中使用了 where
和 orderby
关键字实现条件筛选和排序;在方法语法中则通过调用 Where()
和 OrderBy()
方法实现。
通过查看 IEnumerable<T> 接口可以了解到,该接口没有这些方法,它们以扩展方法的形式存在,并且可以在 Visual Studio IDE 中调用。这些用于完成查询的扩展方法就是标准查询运算符。 从应用程序的角度来看,扩展方法与常规实例方法是相同的。
Info
更多标准查询运算的使用可以参考后续 标准查询运算符 下的相关内容,或者通过链接自行查看 IEnumerable<T> 接口相关内容。