数据分组

更新:2007 年 11 月

分组指将数据放入组中以便每个组中的元素共享公共属性的操作。

下图显示了对字符序列进行分组的结果。每个组的键是字符。

LINQ 分组操作

以下部分列出了对数据元素进行分组的标准查询运算符方法。

方法

方法名

说明

C# 查询表达式语法

Visual Basic 查询表达式语法

更多信息

GroupBy

对共享公共属性的元素进行分组。每个组都由一个 IGrouping<TKey, TElement> 对象表示。

group … by

- 或 -

group … by … into …

Group … By … Into …

Enumerable.GroupBy

Queryable.GroupBy

ToLookup

根据键选择器函数将元素插入到 Lookup<TKey, TElement>(一个一对多字典)中。

不适用。

不适用。

Enumerable.ToLookup

查询表达式语法示例

下面的代码示例使用 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
*/

有关如何对数据进行分组的更多信息

Topic Location
如何:对分组操作执行子查询(C# 编程指南) C# 程序员参考
group 子句(C# 参考) C# 程序员参考
如何:以各种方式对结果进行分组(C# 编程指南) C# 程序员参考
如何:对组进行分组(C# 编程指南) C# 程序员参考
如何:按扩展名对文件进行分组 (LINQ) 语言集成查询 (LINQ)
如何:使用组将一个文件拆分成多个文件 (LINQ) 语言集成查询 (LINQ)
如何:对分组操作执行子查询(C# 编程指南) dv_csref
group 子句(C# 参考) dv_csref
如何:对查询结果进行分组(C# 编程指南) dv_csref
如何:创建嵌套组(C# 编程指南) dv_csref
如何:按扩展名对文件分组 (LINQ) dv_Linq
如何:使用组将一个文件拆分成多个文件 (LINQ) dv_Linq
如何:对分组操作执行子查询(C# 编程指南) dv_csref
group 子句(C# 参考) dv_csref
如何:对查询结果进行分组(C# 编程指南) dv_csref
如何:创建嵌套组(C# 编程指南) dv_csref
如何:按扩展名对文件分组 (LINQ) dv_Linq
如何:使用组将一个文件拆分成多个文件 (LINQ) dv_Linq

请参见

概念

标准查询运算符概述

参考

group 子句(C# 参考)

Group By 子句 (Visual Basic)

System.Linq