English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Sintassi di metodo LINQ

Nel capitolo precedente, hai già familiarizzato con la sintassi della query LINQ. Ora, imparerai la sintassi dei metodi.

La sintassi dei metodi (noto anche come sintassi fluente) utilizza i metodi di estensione contenuti nelle classi statiche Enumerable o Queryable, allo stesso modo in cui si chiamano i metodi di estensione di qualsiasi classe.  

Il compilatore converte la sintassi della query durante la compilazione in sintassi dei metodi.

Di seguito è riportato un esempio di query di sintassi dei metodi LINQ che restituisce una raccolta di stringhe contenente la parola “Tutorials”.

// 字符串集合
IList<string> stringList = new List<string>() { 
    "C# Tutorials",
    "VB.NET Tutorials",
    "Impara C++",
    "MVC Tutorials",
    "Java" 
};
// Sintassi della query LINQ
var result = stringList.Where(s => s.Contains("Tutorials"));

La figura sottostante spiega la struttura della sintassi dei metodi LINQ.

Struttura della sintassi dei metodi LINQ

Come illustrato nella figura, la sintassi dei metodi include l'estensione e l'espressione lambda. L'estensione Where definita nella classe Enumerabile (Enumerable).

Se si esamina la firma dell'estensione Where, si noterà che il metodo Where accetta un Delegato predicate Func<Student, bool> . Questo significa che puoi passare qualsiasi funzione delegata che accetta come parametro un oggetto Student e restituisce un valore booleano, come indicato nella figura sottostante. L'espressione lambda viene utilizzata come funzione delegata passata alla clausola Where. Verrà trattato il Lambda Expression nel prossimo capitolo.

Delegato Func in Where

Esempio: come utilizzare la sintassi dei metodi LINQ con la raccolta IEnumerable <T>.

// Set di studenti
IList<Student> studentList = new List<Student>() { 
        new Student() { StudentID = 1, StudentName = "John", Age = 13} ,
        new Student() { StudentID = 2, StudentName = "Moin", Age = 21 } ,
        new Student() { StudentID = 3, StudentName = "Bill", Age = 18 } ,
        new Student() { StudentID = 4, StudentName = "Ram", Age = 20 },
        new Student() { StudentID = 5, StudentName = "Ron", Age = 15 } 
    };
// Trova studenti adolescenti con la sintassi di metodo LINQ
var teenAgerStudents = studentList.Where(s => s.Age > 12 && s.Age < 20)
                                  .ToList<Student>();
// Set di studenti
Dim studentList = New List(Of Student) From {
        New Student() With {.StudentID = 1, .StudentName = "John", .Age = 13},
        New Student() With {.StudentID = 2, .StudentName = "Moin", .Age = 21},
        New Student() With {.StudentID = 3, .StudentName = "Bill", .Age = 18},
        New Student() With {.StudentID = 4, .StudentName = "Ram", .Age = 20},
        New Student() With {.StudentID = 5, .StudentName = "Ron", .Age = 15}
    }
// Trova studenti adolescenti con la sintassi di metodo LINQ
Dim teenAgerStudents As IList(Of Student) = studentList.Where(Function(s) s.Age > 12 And s.Age < 20)
                                                       .ToList()

 Punti da ricordare

  1. Come dice il nome stesso,Sintassi di metodoÈ come chiamare un metodo esteso.

  2. LINQSintassi di metodoNoto anche come sintassi Fluent (sintassi continua), poiché permette una serie di chiamate a metodi estesi.

  3. La variabile di tipo implicito -var può essere utilizzata per salvare i risultati della query LINQ.