Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>In an expression visitor you would override the method call. Check if the method is Queryable.Where, and if so, the methods second parameter is a quoted expression of type lambda expression. Fish it out and you can screw with it.</p> <pre><code> static void Main() { IQueryable&lt;int&gt; queryable = new List&lt;int&gt;(Enumerable.Range(0, 10)).AsQueryable(); IQueryable&lt;string&gt; queryable2 = queryable .Where(integer =&gt; integer % 2 == 0) .OrderBy(x =&gt; x) .Select(x =&gt; x.ToString()); var expression = Rewrite(queryable2.Expression); } private static Expression Rewrite(Expression expression) { var visitor = new AddToWhere(); return visitor.Visit(expression); } class AddToWhere : ExpressionVisitor { protected override Expression VisitMethodCall(MethodCallExpression node) { ParameterExpression parameter; LambdaExpression lambdaExpression; if (node.Method.DeclaringType != typeof(Queryable) || node.Method.Name != "Where" || (lambdaExpression = ((UnaryExpression)node.Arguments[1]).Operand as LambdaExpression).Parameters.Count != 1 || (parameter = lambdaExpression.Parameters[0]).Type != typeof(int)) { return base.VisitMethodCall(node); } return Expression.Call( node.Object, node.Method, this.Visit(node.Arguments[0]), Expression.Quote( Expression.Lambda( lambdaExpression.Type, Expression.AndAlso( lambdaExpression.Body, Expression.Equal( Expression.Modulo( parameter, Expression.Constant( 4 ) ), Expression.Constant( 0 ) ) ), lambdaExpression.Parameters ) ) ); } } } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload