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 转换为委托和 Expression
s。
显然,LINQ 提供商严重依赖 Expression
s(主要通过 IQueryable<T>
接口公开),以便能够解析查询并将其转换为存储查询。