Практическое руководство. Вложенный запрос в операции группирования (Руководство по программированию на C#)
В этом разделе показано два разных способа создания запроса, упорядочивающего исходные данные в группы, и затем выполняющего вложенный запрос с каждой группой в отдельности. Основной способ в каждом примере заключается в группировании исходных элементов при помощи продолжения с именем newGroup с последующим создание нового вложенного запроса по newGroup. Это вложенный запрос выполняется для каждой новой группы, создаваемой внешним запросов. В этом конкретном примере следует обратить внимание на то, что в конечном итоге получается не группа, а простая последовательность анонимных типов.
Дополнительные сведения о способах группирования см. в разделе Предложение group (Справочник по C#).
Дополнительные сведения о продолжениях см. в разделе into (Справочник по C#). В следующем примере в качестве источника данных используется структура данных в памяти, но те же принципы действуют для любого типа источника данных LINQ.
Пример
public void QueryMax()
{
var queryGroupMax =
from student in students
group student by student.Year into studentGroup
select new
{
Level = studentGroup.Key,
HighestScore =
(from student2 in studentGroup
select student2.ExamScores.Average()).Max()
};
int count = queryGroupMax.Count();
Console.WriteLine("Number of groups = {0}", count);
foreach (var item in queryGroupMax)
{
Console.WriteLine(" {0} Highest Score={1}", item.Level, item.HighestScore);
}
}
Компиляция кода
В этом примере содержатся ссылки на объекты, определенные в примере приложения в разделе Практическое руководство. Запрос коллекции объектов (Руководство по программированию на C#). Чтобы скомпилировать и запустить этот метод, вставьте его в класс StudentClass в этом приложении и добавьте его вызов из метода Main.
Настраивая данный метод для своего приложения, помните, что для LINQ требуется .NET Framework версии 3.5, и проект должен содержать ссылку на библиотеку System.Core.dll и директиву Using для библиотеки System.Linq. Типы LINQ to SQL, LINQ to XML и LINQ to DataSet требуют дополнительных директив Using и ссылок. Дополнительные сведения см. в разделе Практическое руководство. Создание проекта LINQ.
См. также
Основные понятия
Выражения запросов LINQ (Руководство по программированию на C#)