Практическое руководство. Вложенный запрос в операции группирования (Руководство по программированию на 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#)