Assuming the following Person
class:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
The following lambda:
p => p.Age > 18
Can be passed as an argument to both methods:
public void AsFunc(Func<Person, bool> func)
public void AsExpression(Expression<Func<Person, bool>> expr)
Because the compiler is capable of transforming lambdas both to delegates and Expression
s.
Obviously, LINQ providers rely heavily on Expression
s (exposed mainly through the IQueryable<T>
interface) in order to be able to parse queries and translate them to store queries.