Практическое руководство. Возвращение поднаборов свойств элементов в запросе (руководство по программированию на 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.