C# Language Lambdas può essere emesso sia come `Func` che come` Expression`


Esempio

Supponendo la seguente classe Person :

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

Il seguente lambda:

p => p.Age > 18

Può essere passato come argomento per entrambi i metodi:

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

Perché il compilatore è in grado di trasformare lambda sia in delegati che in Expression .

Ovviamente, i provider LINQ fanno molto affidamento su Expression s (esposti principalmente attraverso l'interfaccia IQueryable<T> ) al fine di essere in grado di analizzare le query e tradurle per memorizzare le query.