Udostępnij za pośrednictwem


Jak zwrócić podzestawy właściwości elementu w zapytaniu (Przewodnik programowania w języku C#)

Użyj typu anonimowego w wyrażeniu zapytania, gdy mają zastosowanie oba te warunki:

  • Chcesz zwrócić tylko niektóre właściwości każdego elementu źródłowego.

  • Nie trzeba przechowywać wyników zapytania poza zakresem metody, w której jest wykonywane zapytanie.

Jeśli chcesz zwrócić tylko jedną właściwość lub pole z każdego elementu źródłowego, możesz po prostu użyć operatora kropki w klauzuli select . Aby na przykład zwrócić tylko ID każdą studentwartość , zapisz klauzulę select w następujący sposób:

select student.ID;  

Przykład

W poniższym przykładzie pokazano, jak używać typu anonimowego do zwracania tylko podzestawu właściwości każdego elementu źródłowego zgodnego z określonym warunkiem.

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
*/

Należy pamiętać, że typ anonimowy używa nazw elementu źródłowego dla jego właściwości, jeśli nie określono nazw. Aby nadać nowe nazwy właściwościom w typie anonimowym, zapisz instrukcję select w następujący sposób:

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

Jeśli spróbujesz to zrobić w poprzednim przykładzie, Console.WriteLine instrukcja musi również ulec zmianie:

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

Kompilowanie kodu

Aby uruchomić ten kod, skopiuj i wklej klasę do aplikacji konsolowej języka C# z dyrektywą using System.Linq.

Zobacz też