Consider a class that can be used as a member of multiple other classes:
class Customer {
public string FirstName {get;set;}
public string LastName {get;
Unfortunately, C# does not currently provide a way to compose expressions from Expression
objects. You have to use expression trees, which is quite a bit longer:
static Expression> CheckExpr(Expression> conv, string first, string last) {
var arg = Expression.Parameter(typeof(T));
var get = Expression.Invoke(conv, arg);
return Expression.Lambda>(
Expression.MakeBinary(
ExpressionType.AndAlso
, Expression.MakeBinary(
ExpressionType.Equal
, Expression.Property(get, nameof(Customer.FirstName))
, Expression.Constant(first)
)
, Expression.MakeBinary(
ExpressionType.Equal
, Expression.Property(get, nameof(Customer.LastName))
, Expression.Constant(last)
)
)
, arg
);
}