查询变量和 select 子句之间的类型关系。 但是,也可以使用 var 关键字指示编译器在编译时推断查询变量(或任何其他本地变量)的类型。 例如,还可以使用隐式类型化表示本主题前面部分中演示的查询示例:
// Use of var is optional here and in all queries.
// queryCities is an IEnumerable<City > just as
// when it is explicitly typed.
var queryCities =
from city in cities
where city.Population > 100000
select city;
开始查询表达式查询表达式必须以 from 子句开头。 它同时指定了数据源和范围变量。 在对源序列进行遍历的过程中,范围变量表示源序列中的每个后续元素。 将根据数据源中元素的类型对范围变量进行强类型化。 在下面的示例中,因为 countries 是 Country 对象数组,所以范围变量也被类型化为 Country, 这样就可以使用点运算符来访问该类型的任何可用成员。
IEnumerable<Country > countryAreaQuery =
from country in countries
where country.Area > 500000
//sq kmselect country;
在使用分号或延续子句退出查询之前,范围变量将一直位于范围中。
查询表达式可以包含多个 from 子句。 当源序列中的每个元素本身就是集合或包含集合时,可使用附加的 from 子句。 例如,假定您具有一个 Country 对象集合,而其中每个对象都包含一个名为 Cities 的City 对象集合。 若要查询每个 Country 中的 City 对象,请使用两个from 子句,如下所示:
IEnumerable<City > cityQuery =
from country in countries
from city in country.Cities
where city.Population > 10000
select city;
结束查询表达式查询表达式必须以 select 子句或 group 子句结尾。
group 子句使用 group 子句可产生按照指定的键组织的组序列。 键可以采用任何数据类型。 例如,下面的查询创建一个组序列,该序列包含一个或多个 Country 对象,并且它的键是 char 值。
var queryCountryGroups =
from country in countries
group country by country.Name[0];
窍钟械募际跫芄鼓艽硭薄U庋龅慕峁褪牵焊s