Поделиться через


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

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

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

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

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

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