对查询结果的元素进行分组。 还可用于将聚合函数应用于每个组。 分组作基于一个或多个键。
语法
Group [ listField1 [, listField2 [...] ] By keyExp1 [, keyExp2 [...] ]
Into aggregateList
-或-
Group [ listField1 [, listField2 [...] ] By alias1 = keyExp1 [, alias2 = keyExp2 [...] ]
Into aggregateList
部件
listField1、listField2可选。 查询变量或变量的一个或多个字段,这些字段显式标识要包含在分组结果中的字段。 如果未指定任何字段,则查询变量或变量的所有字段都包含在分组结果中。
alias1、alias2可选。 分配给分组键的名称。 如果提供了别名,则可以在查询结果中引用别名,而不是键表达式。
keyExp1必填。 一个表达式,标识用于确定元素组的键。 可以指定多个键来指定组合键。
keyExp2可选。 与一个或多个组合在一起
keyExp1以创建复合键的其他键。aggregateList必填。 一个或多个标识如何聚合组的表达式。 若要标识分组结果的成员名称,请使用
Group关键字,该关键字可以采用以下任一形式:Into Group-或-
Into <alias> = Group还可以包含要应用于组的聚合函数。
注解
可以使用子 Group By 句将查询的结果分解为组。 分组基于由多个键组成的键或复合键。 与匹配键值关联的元素包含在同一组中。
使用 aggregateList 子句的参数 Into 和 Group 关键字来标识用于引用组的成员名称。 还可以在子句中包含 Into 聚合函数,以计算分组元素的值。 有关标准聚合函数的列表,请参阅 Aggregate 子句。
示例:
下面的代码示例根据客户的位置(国家/地区)对客户列表进行分组,并提供每个组中的客户计数。 结果按国家/地区名称排序。 分组结果按城市名称排序。
Public Sub GroupBySample()
Dim customers = GetCustomerList()
Dim customersByCountry = From cust In customers
Order By cust.City
Group By CountryName = cust.Country
Into RegionalCustomers = Group, Count()
Order By CountryName
For Each country In customersByCountry
Console.WriteLine(country.CountryName &
" (" & country.Count & ")" & vbCrLf)
For Each customer In country.RegionalCustomers
Console.WriteLine(vbTab & customer.CompanyName &
" (" & customer.City & ")")
Next
Next
End Sub