To set a comparison operator in linq query dynamically, i do the following:
parameter = Expression.Parameter(typeof(SomeType));
var predicate = Expression.Lambda<Func<SomeType, bool>>(
Combine(
"=",
Expression.Property(parameter, "ID"),
Expression.Constant(150497)
), parameter);
BinaryExpression Combine(string op, Expression left, Expression right)
{
switch (op)
{
case "=":
return Expression.Equal(left, right);
case "<":
return Expression.LessThan(left, right);
case ">":
return Expression.GreaterThan(left, right);
}
return null;
}
That works. But I'd rather pass a lambda expression as parameter "left" instead. Is that possible? Something like:
var predicate = Expression.Lambda<Func<SomeType, bool>>(Combine(
"=",
c => c.ID,
Expression.Constant(150497)
), parameter);