对查询结果的元素进行分组。 还可用于将聚合函数应用于每个组。 分组作基于一个或多个键。
语法
Group [ listField1 [, listField2 [...] ] By keyExp1 [, keyExp2 [...] ]
Into aggregateList
部件
listField1
、listField2
可选。 查询变量或变量的一个或多个字段,这些字段显式标识要包含在分组结果中的字段。 如果未指定任何字段,则查询变量或变量的所有字段都包含在分组结果中。
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