СДЕЛАЙТЕ СВОИ УРОКИ ЕЩЁ ЭФФЕКТИВНЕЕ, А ЖИЗНЬ СВОБОДНЕЕ

Благодаря готовым учебным материалам для работы в классе и дистанционно

Скидки до 50 % на комплекты
только до

Готовые ключевые этапы урока всегда будут у вас под рукой

Организационный момент

Проверка знаний

Объяснение материала

Закрепление изученного

Итоги урока

Агрегатные операции и группировка

Категория: Информатика

Нажмите, чтобы узнать подробности

Просмотр содержимого документа
«Агрегатные операции и группировка»

Агрегатные операции и группировка

Агрегатные операции и группировка

  Агрегатные операции  К агрегатным операциям относят различные операции над выборкой, например, получение числа элементов, получение минимального, максимального и среднего значения в выборке, а также суммирование значений.

Агрегатные операции

  • К агрегатным операциям относят различные операции над выборкой, например, получение числа элементов, получение минимального, максимального и среднего значения в выборке, а также суммирование значений.
  Метод Aggregate  Метод Aggregate выполняет общую агрегацию элементов коллекции в зависимости от указанного выражения. Например:

Метод Aggregate

  • Метод Aggregate выполняет общую агрегацию элементов коллекции в зависимости от указанного выражения. Например:
x - y, то есть вначале из первого элемента вычитается второй, потом из получившегося значения вычитается третий и так далее. То есть будет эквивалентно выражению: " width="640"
  • Переменная query будет представлять результат агрегации массива. В качестве условия агрегации используется выражение (x,y)= x - y, то есть вначале из первого элемента вычитается второй, потом из получившегося значения вычитается третий и так далее. То есть будет эквивалентно выражению:
 В итоге мы получим число -13. Соответственно мы бы могли использовать любые другие операции, например, сложение:
  • В итоге мы получим число -13. Соответственно мы бы могли использовать любые другие операции, например, сложение:
 Получение размера выборки. Метод Count  Для получения числа элементов в выборке используется метод Count() :

Получение размера выборки. Метод Count

  • Для получения числа элементов в выборке используется метод Count() :
 Метод Count() в одной из версий также может принимать лямбда-выражение, которое устанавливает условие выборки. Поэтому мы можем в данном случае не использовать выражение Where:
  • Метод Count() в одной из версий также может принимать лямбда-выражение, которое устанавливает условие выборки. Поэтому мы можем в данном случае не использовать выражение Where:
 Получение суммы  Для получения суммы значений применяется метод Sum :

Получение суммы

  • Для получения суммы значений применяется метод Sum :
n.Age) " width="640"
  • Метод Sum() имеет ряд перегрузок. В частности, если у нас набор сложных объектов, как в примере выше, то мы можем указать свойство, значения которого будут суммироваться: users.Sum(n = n.Age)
Максимальное, минимальное и среднее значения Для нахождения минимального значения применяется метод Min(), для получения максимального - метод Max(), а для нахождения среднего значения - метод Average(). Их действие похоже на методы Sum и Count:

Максимальное, минимальное и среднее значения

  • Для нахождения минимального значения применяется метод Min(), для получения максимального - метод Max(), а для нахождения среднего значения - метод Average(). Их действие похоже на методы Sum и Count:
Методы Skip и Take Метод Skip() пропускает определенное количество элементов, а метод Take() извлекает определенное число элементов. Нередко данные методы применяются вместе для создания постраничного вывода.

Методы Skip и Take

  • Метод Skip() пропускает определенное количество элементов, а метод Take() извлекает определенное число элементов. Нередко данные методы применяются вместе для создания постраничного вывода.
Извлечем три первых элемента:

Извлечем три первых элемента:

Выберем все элементы, кроме первых трех:

Выберем все элементы, кроме первых трех:

Совмещая оба метода, мы можем выбрать определенное количество элементов начиная с определенного элемента. Например, выберем три элемента, начиная с пятого (то есть пропустив четыре элемента): Похожим образом работают методы TakeWhile и SkipWhile.
  • Совмещая оба метода, мы можем выбрать определенное количество элементов начиная с определенного элемента. Например, выберем три элемента, начиная с пятого (то есть пропустив четыре элемента):

Похожим образом работают методы TakeWhile и SkipWhile.

Метод TakeWhile выбирает цепочку элементов, начиная с первого элемента, пока они удовлетворяют определенному условию. Например:
  • Метод TakeWhile выбирает цепочку элементов, начиная с первого элемента, пока они удовлетворяют определенному условию. Например:
Согласно условию мы выбираем те команды, которые начинаются с буквы Б. В массиве есть три таких команды. Однако в цикле будут выведены только две первых:
  • Согласно условию мы выбираем те команды, которые начинаются с буквы Б. В массиве есть три таких команды. Однако в цикле будут выведены только две первых:
Потому что цепочка обрывается на третьей команде -
  • Потому что цепочка обрывается на третьей команде - "Реал Мадрид" - она не соответствует условию, и после этого выборка уже не идет.
  • Если бы первой командой в массиве стояла бы команда, начинающаяся не с буквы Б, например, "Реал Мадрид", то в этом случае метод возвратил бы нам 0 элементов.
В подобном русле действует метод SkipWhile. Он пропускает цепочку элементов, начиная с первого элемента, пока они удовлетворяют определенному условию. Например:
  • В подобном русле действует метод SkipWhile. Он пропускает цепочку элементов, начиная с первого элемента, пока они удовлетворяют определенному условию. Например:
Первые две команды, которые начинаются с буквы Б и соответствуют условию, будут пропущены. На третьей команде цепочка обрывается, поэтому последняя команда, начинающаяся с буквы Б, будет включена в выходной список:
  • Первые две команды, которые начинаются с буквы Б и соответствуют условию, будут пропущены. На третьей команде цепочка обрывается, поэтому последняя команда, начинающаяся с буквы Б, будет включена в выходной список:
И опять же если в массиве первый элемент не начинался бы с буквы Б, то цепочка пропускаемых элементов прервалась бы уже на первом элементе, и поэтому метод SkipWhile возвратил бы все элементы массива.
  • И опять же если в массиве первый элемент не начинался бы с буквы Б, то цепочка пропускаемых элементов прервалась бы уже на первом элементе, и поэтому метод SkipWhile возвратил бы все элементы массива.
Группировка Для группировки данных по определенным параметрам применяется оператор group by или метод GroupBy(). Допустим, у нас есть набор из объектов следующего типа:

Группировка

  • Для группировки данных по определенным параметрам применяется оператор group by или метод GroupBy(). Допустим, у нас есть набор из объектов следующего типа:
Данный класс представляет модель телефона, в которой определены свойства для названия и компании-производителя. Сгруппируем набор телефонов по производителю:
  • Данный класс представляет модель телефона, в которой определены свойства для названия и компании-производителя. Сгруппируем набор телефонов по производителю:
Если в выражении LINQ последним оператором, выполняющим операции над выборкой, является group, то оператор select не применяется. Оператор group принимает критерий по которому проводится группировка: group phone by phone.Company - в данном случае группировка по свойству Company.
  • Если в выражении LINQ последним оператором, выполняющим операции над выборкой, является group, то оператор select не применяется.
  • Оператор group принимает критерий по которому проводится группировка: group phone by phone.Company - в данном случае группировка по свойству Company.
Результатом оператора group является выборка, которая состоит из групп. Каждая группа представляет объект IGrouping: параметр string указывает на тип ключа, а параметр Phone - на тип сгруппированных объектов. Каждая группа имеет ключ, который мы можем получить через свойство Key: g.Key Все элементы группы можно получить с помощью дополнительной итерации. Элементы группы имеют тот же тип, что и тип объектов, которые передавались оператору group, то есть в данном случае объекты типа Phone.
  • Результатом оператора group является выборка, которая состоит из групп. Каждая группа представляет объект IGrouping: параметр string указывает на тип ключа, а параметр Phone - на тип сгруппированных объектов.
  • Каждая группа имеет ключ, который мы можем получить через свойство Key: g.Key
  • Все элементы группы можно получить с помощью дополнительной итерации. Элементы группы имеют тот же тип, что и тип объектов, которые передавались оператору group, то есть в данном случае объекты типа Phone.
В итоге мы получим следующий вывод:

В итоге мы получим следующий вывод:

Аналогичный запрос можно построить с помощью метода расширения GroupBy:
  • Аналогичный запрос можно построить с помощью метода расширения GroupBy:
Теперь изменим запрос и получим команду и создадим из группы новый объект:
  • Теперь изменим запрос и получим команду и создадим из группы новый объект:
Выражение group phone by phone.Company into g определяет переменную g, которая будет содержать группу. С помощью этой переменной мы можем затем создать новый объект анонимного типа: select new { Name = g.Key, Count = g.Count() } Теперь результат запроса LINQ будет представлять набор объектов таких анонимных типов, у которых два свойства Name и Count.
  • Выражение group phone by phone.Company into g определяет переменную g, которая будет содержать группу. С помощью этой переменной мы можем затем создать новый объект анонимного типа: select new { Name = g.Key, Count = g.Count() } Теперь результат запроса LINQ будет представлять набор объектов таких анонимных типов, у которых два свойства Name и Count.
Результат программы:

Результат программы:

Аналогичная операция с помощью метода GroupBy():

Аналогичная операция с помощью метода GroupBy():

Также мы можем осуществлять вложенные запросы:

Также мы можем осуществлять вложенные запросы:

Здесь свойство Phones каждой группы формируется с помощью дополнительного запроса, выбирающего все телефоны в этой группе. Консольный вывод программы:
  • Здесь свойство Phones каждой группы формируется с помощью дополнительного запроса, выбирающего все телефоны в этой группе. Консольный вывод программы:
Аналогичный запрос с помощью метода GroupBy:

Аналогичный запрос с помощью метода GroupBy: