C# Language Lambdas se puede emitir como `Func` y` Expresión`


Ejemplo

Suponiendo la siguiente clase de Person :

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

La siguiente lambda:

p => p.Age > 18

Se puede pasar como argumento a ambos métodos:

public void AsFunc(Func<Person, bool> func)
public void AsExpression(Expression<Func<Person, bool>> expr)

Porque el compilador es capaz de transformar lambdas tanto a delegados como a Expression s.

Obviamente, los proveedores de LINQ dependen en gran medida de Expression s (expuesto principalmente a través de la interfaz IQueryable<T> ) para poder analizar las consultas y traducirlas a las consultas almacenadas.