数据分组
分组指将数据放入组中以便每个组中的元素共享公共特性的操作。
下图显示了对字符序列进行分组的结果。 每个组的键是字符。
以下部分列出了对数据元素进行分组的标准查询运算符方法。
方法
方法名 |
说明 |
C# 查询表达式语法 |
Visual Basic 查询表达式语法 |
更多信息 |
---|---|---|---|---|
GroupBy |
对共享公共特性的元素进行分组。 每个组都由一个 IGrouping<TKey, TElement> 对象表示。 |
group … by - 或 - group … by … into … |
Group … By … Into … |
|
ToLookup |
根据键选择器函数将元素插入到 Lookup<TKey, TElement>(一个一对多字典)中。 |
不适用。 |
不适用。 |
查询表达式语法示例
下面的代码示例使用 C# 中的 group by 子句或 Visual Basic 中的 Group By 子句,根据列表中的整数是奇数还是偶数对这些整数进行分组。
Dim numbers As New System.Collections.Generic.List(Of Integer)(
New Integer() {35, 44, 200, 84, 3987, 4, 199, 329, 446, 208})
Dim query = From number In numbers
Group By Remainder = (number Mod 2) Into Group
Dim sb As New System.Text.StringBuilder()
For Each group In query
sb.AppendLine(If(group.Remainder = 0, vbCrLf & "Even numbers:", vbCrLf & "Odd numbers:"))
For Each num In group.Group
sb.AppendLine(num)
Next
Next
' Display the results.
MsgBox(sb.ToString())
' This code produces the following output:
' Odd numbers:
' 35
' 3987
' 199
' 329
' Even numbers:
' 44
' 200
' 84
' 4
' 446
' 208
List<int> numbers = new List<int>() { 35, 44, 200, 84, 3987, 4, 199, 329, 446, 208 };
IEnumerable<IGrouping<int, int>> query = from number in numbers
group number by number % 2;
foreach (var group in query)
{
Console.WriteLine(group.Key == 0 ? "\nEven numbers:" : "\nOdd numbers:");
foreach (int i in group)
Console.WriteLine(i);
}
/* This code produces the following output:
Odd numbers:
35
3987
199
329
Even numbers:
44
200
84
4
446
208
*/