Condividi tramite


Come restituire sottoinsiemi di proprietà degli elementi in una query (Guida per programmatori C#)

Usare un tipo anonimo in un'espressione di query quando si verificano entrambe le condizioni seguenti:

  • Si vogliono restituire solo alcune delle proprietà di ogni elemento di origine.

  • Non è necessario archiviare la query all'esterno dell'ambito del metodo in cui è stata eseguita.

Se si vuole restituire solo una proprietà o un campo da ogni elemento di origine, è sufficiente usare l'operatore punto nella clausola select. Per restituire, ad esempio, solo l'ID di ogni student, scrivere la clausola select come segue:

select student.ID;  

Esempio

Nell'esempio seguente viene illustrato come usare un tipo anonimo per restituire solo un sottoinsieme delle proprietà di ogni elemento di origine che corrisponde alla condizione specificata.

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

Si noti che se per le proprietà non è specificato alcun nome, il tipo anonimo usa i nomi dell'elemento di origine. Per assegnare nuovi nomi alle proprietà nel tipo anonimo, scrivere l'istruzione select come segue:

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

Se si tenta questa operazione nell'esempio precedente, è necessario modificare anche l'istruzione Console.WriteLine:

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

Compilazione del codice

Per eseguire questo codice, copiare e incollare la classe in un'applicazione console C# con una direttiva using per System.Linq.

Vedi anche