Linq有很多值得学习的地方,这里我们主要介绍Linq数据分组,包括介绍使用 Group 关键字等方面。
Linq数据分组(GROUP BY)
根据元素的一个或多个字段对查询结果中的元素进行分组。例如:按年级 (class year) 对学生进行Linq数据分组:
- Dim studentsByYear = From student In students _
- Select student _
- Group By year = student.Year _
- Into Classes = Group
输出结果的程序:
- For Each yearGroup In studentsByYear
- Console.WriteLine(vbCrLf & "Year: " & yearGroup.year)
- For Each student In yearGroup.Classes
- Console.WriteLine(" " & student.Last & ", " & student.First)
- Next
- Next
完整语法:
- Group [ listField1 [, listField2 [...] ] By keyExp1 [, keyExp2 [...] ]
- Into aggregateList
◆listField1, listField2 :可选。查询变量的一个或多个字段,这些查询变量显式标识要包括在分组结果中的字段。如果未指定任何字段,则查询变量的所有字段都包括在分组结果中。
◆keyExp1 :必需。一个表达式,标识用于确定元素的分组的键。可以指定多个键来指定一个组合键。
◆keyExp2 :可选。一个或多个附加键,与 keyExp1 组合在一起,创建一个组合键。
◆aggregateList :必需。一个或多个表达式,标识如何对组进行聚合。若要为分组结果标识一个成员名称,请使用 Group 关键字,该关键字可以:Into Group
Linq数据分组例如:
- Dim ***层_分组 = From cust In db.Customers _
- Group By 国家 = cust.Country _
- Into 第二层_分组元素 = Group, Count() _
- Order By 国家
- For Each A分组 In ***层_分组
- Console.WriteLine(A分组.国家 & "(" & A分组.Count & ")")
- For Each A元素 In A分组.第二层_分组元素
- Console.WriteLine(vbTab + A元素.CompanyName + "," + A元素.ContactName)
- Next
- Next
【编辑推荐】