Группировка

Данное руководство устарело. Актуальное руководство: Руководство по Entity Framework Core

Последнее обновление: 31.10.2015

Чтобы сгруппировать данные по определенным параметрам используются оператор group by или метод GroupBy(). Например, сгруппируем модели телефонов по производителю:

using(PhoneContext db = new PhoneContext())
{
    var groups = from p in db.Phones
                group p by p.Company.Name;
    foreach (var g in groups)
    {
        Console.WriteLine(g.Key);
        foreach (var p in g)
            Console.WriteLine("{0} - {1}", p.Name, p.Price);
        Console.WriteLine();
    }
}

В данном случае критерием для объединения групп является название компании, то есть столбец Name из связанной таблицы Companies. Критерий, по которому проводится группировка, является ключом. Ключ мы можем получить через свойство Key, которое есть у группы.

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

Samsung
Samsung Galaxy S5 - 20000
Samsung Galaxy S4 - 15000

Apple
iPhone5 - 28000
iPhone4S - 23000

Аналогично работает метод GroupBy():

var groups = db.Phones.GroupBy(p=>p.Company.Name);

Кроме свойства Key у группы есть метод Count(), который возвращает количество элементов в данной группе. Например, сформируем новый элемент, который будет содержать ключ группы и количество ее элементов:

var groups = from p in db.Phones
            group p by p.Company.Name into g
            select new { Name = g.Key, Count = g.Count()};
// альтернативный способ
//var groups = db.Phones.GroupBy(p=>p.Company.Name)
//					.Select(g => new { Name = g.Key, Count = g.Count()});
foreach (var c in groups)
    Console.WriteLine("Производитель: {0} Кол-во моделей: {1}", c.Name, c.Count);

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

Производитель: Apple Кол-во моделей: 2
Производитель: Samsung Кол-во моделей: 2
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850