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

Sintaxe de Método LINQ

No capítulo anterior, você já aprendeu a sintaxe de consulta LINQ. Aqui, você aprenderá a sintaxe de método.

A sintaxe de método (também conhecida como sintaxe fluente) usa métodos de extensão contidos nas classes estáticas Enumerable ou Queryable, de maneira semelhante a como você chama métodos de extensão de qualquer classe.  

O compilador converte a sintaxe de consulta no tempo de compilação.

A seguir está um exemplo de consulta de sintaxe de método LINQ que retorna um conjunto de strings contendo a palavra "Tutorials".

// Conjunto de strings
IList<string> stringList = new List<string>() { 
    "C# Tutorials",
    "VB.NET Tutorials",
    "Aprenda C++",
    "MVC Tutorials",
    "Java" 
};
// Sintaxe de consulta LINQ
var result = stringList.Where(s => s.Contains("Tutorials"));

A figura a seguir ilustra a estrutura da sintaxe de método LINQ.

Estrutura da sintaxe de método LINQ

Como mostrado na figura, a sintaxe de método inclui métodos de extensão e expressões lambda. O método de extensão Where () definido na classe Enumerable.

Se você verificar a assinatura do método de extensão Where, verá que o método Where aceita um Delegado predicate Func<Student,bool>。Isso significa que você pode passar qualquer função de delegate que aceite um objeto Student como parâmetro de entrada e retorne um valor booleano, conforme mostrado na figura a seguir. A expressão lambda é usada como delegate passada para a cláusula Where. No próximo capítulo, você aprenderá sobre expressões lambda.

Delegado Func no Where

O exemplo a seguir demonstra como usar a sintaxe de método do LINQ com conjuntos IEnumerable <T>.

// Conjunto de Estudantes
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 } 
    };
// A Sintaxe de Método LINQ encontra estudantes adolescentes
var teenAgerStudents = studentList.Where(s => s.Age > 12 E s.Age < 20)
                                  .ToList<Student>();
// Conjunto de Estudantes
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}
    }
// A Sintaxe de Método LINQ encontra estudantes adolescentes
Dim teenAgerStudents As IList(Of Student) = studentList.Where(Function(s) s.Age > 12 E s.Age < 20)
                                                       .ToList()

 Pontos a lembrar

  1. Como o próprio nome sugereSintaxe de MétodoÉ como chamar métodos de extensão.

  2. LINQSintaxe de MétodoTambém conhecido como sintaxe Fluent (Fluente), pois permite uma série de chamadas de métodos de extensão.

  3. Variável de Tipo Implícito-var pode ser usado para salvar o resultado da consulta LINQ.