using System.Linq.Expressions;
using System.Collections.Generic;
public static void Main() {
string[] names = { "Burke", "Laptop", "Computer",
"Mobile", "Ahemed", "Sania",
"Kungada", "David","United","Sinshia" };
Random rnd = new Random();
List<Expression<Func<string,bool>>> expressionList = new List<Expression<Func<string,bool>>> {
Expression<Func<string,bool>> finalExpression = null;
foreach(var exp in expressionList){
if(finalExpression == null){
finalExpression = Expression.Lambda<Func<string, bool>>(Expression.AndAlso(
new SwapVisitor(finalExpression.Parameters[0], exp.Parameters[0]).Visit(finalExpression.Body),
exp.Body), exp.Parameters);
finalExpression = Expression.Lambda<Func<string, bool>>(Expression.OrElse(
new SwapVisitor(finalExpression.Parameters[0], exp.Parameters[0]).Visit(finalExpression.Body),
exp.Body), exp.Parameters);
var query = names.AsQueryable().Where(finalExpression);
foreach (string item in query.ToList())
class SwapVisitor : ExpressionVisitor
private readonly Expression from, to;
public SwapVisitor(Expression from, Expression to)
public override Expression Visit(Expression node)
return node == from ? to : base.Visit(node);