让编译器处理泛型类型声明
如果您愿意,可以使用
var
关键字来避免使用泛型语法。
Var
关键字指示编译器通过
查看在
from
子句中指定的数据源来推断查询变量的类型。下面的示例生成与上一个示例
相同的编译代码:
C#
var customerQuery2 =
from cust in customers
where cust.City == "London"
select cust;
foreach(var customer in customerQuery2)
{
Console.WriteLine(customer.LastName + ", " + customer.FirstName);
}
当变量的类型明显或显式指定嵌套泛型类型(如由组查询生成的那些类型)并不重要时,
var
关键字很有用。通常,我们建议如果您使用
var
,应意识到这可能使您的代码更难以
让别人理解。有关更多信息,请参见隐式类型的局部变量(
C#
编程指南)。
基本查询操作(LINQ)
如果您已熟悉查询语言(如 SQL 或 XQuery),则您可以跳过本主题的大部分内容。阅
读下一节中的“from 子句”来了解 LINQ 查询表达式中的子句的顺序。
获取数据源
在
LINQ
查询中,第一步是指定数据源。像在大多数编程语言中一样,在
C#
中,必须先声
明 变 量 , 才 能 使 用 它 。 在
LINQ
查 询 中 , 最 先 使 用
from
子 句 的 目 的 是 引 入 数 据 源
(
customer
)和范围变量(
cust
)。
C#
//queryAllCustomers is an IEnumerable<Customer>
var queryAllCustomers = from cust in customers
select cust;
范围变量类似于 foreach 循环中的迭代变量,但在查询表达式中,实际上不发生迭代。执行
查询时,范围变量将用作对 customer 中的每个后续元素的引用。因为编译器可以推断 cust
的类型,所有您不必显式指定此类型。其他范围变量可由 let 子句引入。
说明:对于非泛型数据源(如 ArrayList),必须显式类型化范围变量。
筛选
也许最常用的查询操作是应用布尔表达式形式的筛选器。此筛选器使查询只返回那些表达
式结果为
true
的元素。使用
where
子句生成结果。实际上,筛选器指定从源序列中排除那
些元素。在下面的示例中,只返回那些地址位于伦敦的
customer
。
C#
var queryLondonCustomers = from cust in customers
where cust.City == "London"
select cust;