Lambdas 可以作為 Func 和 Expression 發出

假設以下 Person 類:

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

以下 lambda:

p => p.Age > 18

可以作為引數傳遞給兩個方法:

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

因為編譯器能夠將 lambdas 轉換為委託和 Expressions。

顯然,LINQ 提供商嚴重依賴 Expressions(主要通過 IQueryable<T> 介面公開),以便能夠解析查詢並將其轉換為儲存查詢。