Данное руководство устарело. Актуальное руководство: Руководство по Entity Framework Core
Чтобы сгруппировать данные по определенным параметрам используются оператор 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