数据分组

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

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

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
            */

请参见

任务

如何:创建嵌套组(C# 编程指南)

如何:按扩展名对文件分组 (LINQ)

如何:对查询结果进行分组(C# 编程指南)

如何:对分组操作执行子查询(C# 编程指南)

如何:使用组将一个文件拆分成多个文件 (LINQ)

参考

group 子句(C# 参考)

Group By 子句 (Visual Basic)

System.Linq

概念

标准查询运算符概述