Практическое руководство. Возвращение поднаборов свойств элементов в запросе (руководство по программированию на C#)

Используйте анонимный тип в выражении запроса, если выполняются оба следующих условия:

  • требуется возвращать только некоторые свойства каждого исходного элемента;

  • не требуется хранить результаты запроса за пределами области метода, в котором выполняется запрос.

Если требуется возвращать только одно свойство или поле из каждого исходного элемента, вы можете использовать оператор "точка" в предложении select. Например, чтобы вернуть только ID для каждого элемента student, напишите предложение select следующим образом:

select student.ID;  

Пример

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

private static void QueryByScore()
{
    // Create the query. var is required because
    // the query produces a sequence of anonymous types.
    var queryHighScores =
        from student in students
        where student.ExamScores[0] > 95
        select new { student.FirstName, student.LastName };

    // Execute the query.
    foreach (var obj in queryHighScores)
    {
        // The anonymous type's properties were not named. Therefore
        // they have the same names as the Student properties.
        Console.WriteLine(obj.FirstName + ", " + obj.LastName);
    }
}
/* Output:
Adams, Terry
Fakhouri, Fadi
Garcia, Cesar
Omelchenko, Svetlana
Zabokritski, Eugene
*/

Обратите внимание, что анонимный тип использует имена исходных элементов для соответствующих свойств, если имена не заданы. Чтобы присваивать новые имена свойствам в анонимном типе, напишите инструкцию select следующим образом:

select new { First = student.FirstName, Last = student.LastName };  

Если вы попробуете сделать это в предыдущем примере, также необходимо изменить инструкцию Console.WriteLine:

Console.WriteLine(student.First + " " + student.Last);  

Компиляция кода

Чтобы выполнить этот код, скопируйте и вставьте класс в консольное приложение C# с директивой using для пространства имен System.Linq.

См. также