Группировка данных

Группировкой называется операция размещения данных по группам так, что элементы в каждой группе имеют общий атрибут.

На следующем рисунке показаны результаты группировки последовательности знаков. Ключом для каждой группы является знак.

Операции группировки 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

Пример синтаксиса выражения запроса

В следующем примере кода для группировки целых чисел из списка на основании четности и нечетности используется предложение group by в C# или предложение Group By в Visual Basic.


        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

Основные понятия

Общие сведения о стандартных операторах запроса