Skip to content

Instantly share code, notes, and snippets.

@damieng
Created May 17, 2017 05:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save damieng/f0a5c13b04b200603c9970473f7598b7 to your computer and use it in GitHub Desktop.
Save damieng/f0a5c13b04b200603c9970473f7598b7 to your computer and use it in GitHub Desktop.
OR together LINQ expressions for Where clauses etc
class Or
{
public static Expression<Func<T, bool>> Combine<T>(Expression<Func<T, bool>> left, Expression<Func<T, bool>> right)
{
var parameter = Expression.Parameter(typeof(T), "p");
var combined = new ParameterReplacer(parameter).Visit(Expression.OrElse(left.Body, right.Body));
return Expression.Lambda<Func<T, bool>>(combined, parameter);
}
class ParameterReplacer : ExpressionVisitor
{
readonly ParameterExpression parameter;
internal ParameterReplacer(ParameterExpression parameter)
{
this.parameter = parameter;
}
protected override Expression VisitParameter(ParameterExpression node)
{
return parameter;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment