title: Create fully dynamic where clause with expression tree and execute on IQueryable
body: <p>At point (3) in my code I have defined a query called query1 in which I defined a .Where lambda expression. This query is in some way dynamic but still contains static elements, it always refers to the Type Employee and its (int) property ClientID. </p>
  
  <p>Now I very much like to make the refering to the type and its property dynamic, based on the method parameters which by example are shown below point (1). </p>
  
  <p>What I tried to so far is making the static part of the query defined under point (3) fully dynamic by replacing it with a more elaborate expression tree as written down in (4), (5) &amp; (6). But when I try to add everything together it says I call .Where with wrong parameters. I don't know how to call .Where with the right parameters in order to create a fully dynamic select. </p>
  
  <p>Does someone know to solve this problem? I have spent a day searching and haven't found a solution so far.</p>
  
  <pre><code>        dsMain domainService = new dsMain();
  
  
          //(1)i want to rewrite the following four variables to method-parameters
          Type entityType = typeof(Employee);
          String targetProperty = "ClientID";
          Type entityProperty = typeof(Employee).GetProperty(targetProperty).PropertyType;
          int idToDelete = 5;
  
  
          //(2)create expression-function: idToDelete == entityType.targetProperty (in this case: Employee.ClientID)
          ParameterExpression numParam = Expression.Parameter(entityProperty, targetProperty.Substring(0, 3));
          ConstantExpression equalTarget = Expression.Constant(idToDelete, idToDelete.GetType());
          BinaryExpression intEqualsID = Expression.Equal(numParam, equalTarget);
          Expression&lt;Func&lt;int, bool&gt;&gt; lambda1 =
                      Expression.Lambda&lt;Func&lt;int, bool&gt;&gt;(
                      intEqualsID,
                      new ParameterExpression[] { numParam });
  
          //(3)I want to create query1 fully dynamic, so defining Employee or an other type and its property at run time
          WhereClause = lambda1.Compile();
          IQueryable&lt;Employee&gt; employees = domainService.GetEmployees();
          var query1 = employees.Where&lt;Employee&gt;(C =&gt; WhereClause.Invoke(C.ClientID)).Expression;
  
  
  
          //(4)create the operand body {value(ASP.test_aspx).WhereClause.Invoke(E.ClientID)}
          var operandbodyMethod = WhereClause.GetType().GetMethod("Invoke");
          var operandbodyType = typeof(System.Boolean);
          var operandbodyArgs1Expression = Expression.Parameter(entityType, entityType.Name.Substring(0, 1));
          var operandbodyArgs1 = Expression.MakeMemberAccess(operandbodyArgs1Expression, entityType.GetMember(targetProperty)[0]);
          var operandBodyObjectExp = Expression.Constant(this, this.GetType());
          var operandbodyObject = Expression.MakeMemberAccess(operandBodyObjectExp, this.GetType().GetMember("WhereClause")[0]);
  
          //(5)create the operand {E =&gt; value(ASP.test_aspx).WhereClause.Invoke(E.ClientID)}
          var operandbody = Expression.Call(operandbodyObject, operandbodyMethod, operandbodyArgs1);
          var operandParameter = Expression.Parameter(entityType, entityType.Name.Substring(0, 1));
          var operandType = typeof(Func&lt;,&gt;).MakeGenericType(entityType, typeof(System.Boolean));
  
          //(6)
          var operand = Expression.Lambda(operandType, operandbody, new ParameterExpression[] { operandParameter });
          var expressionType = typeof(Expression&lt;&gt;).MakeGenericType(operandType);
          var completeWhereExpression = Expression.MakeUnary(ExpressionType.Quote, operand, expressionType);
  
  
          //(7)the line below does not work
          var query2 = employees.Where&lt;Employee&gt;(completeWhereExpression).Expression;
  </code></pre>
  
  <p>Thank you very much for reading my question!
  If you have questions about my question, please ask them:)</p>