c# - How to remove or overwrite where clause in existing IQueryable -


assuming following prefiltered iqueryable:

var query = items.where(i => i.propertyname == "some property"); 

coming third party library, possible either remove clause completely, or replace with:

.where(i => i.propertyname == null || i.propertyname == "some property") 

i've seen mentions of being able rewrite iqueryable on fly. approach have downsides? how go doing it? there better way?

update

i've managed cobble using expressionvisitor suggested ivan:

public class whereremovevisitor : expressionvisitor {     protected override expression visitmethodcall(methodcallexpression node)     {         if (node.method.name == "where" && node.method.declaringtype == typeof(queryable))             return node.arguments[0];         else             return base.visitmethodcall(node);     } } 

and:

public static class iqueryableextensions {     public static iqueryable<t> removewhere<t>(this iqueryable<t> expression)     {         return expression.lambda<iqueryable<t>>(new whereremovevisitor().visit(expression.expression)).compile();     } } 

while compiles fine, throws "lambda type parameter must derived system.delegate" in extension method.

i've managed put using expressionvisitor suggested ivan:

public class whereremovevisitor : expressionvisitor {     protected override expression visitmethodcall(methodcallexpression node)     {         if (node.method.name == "where" && node.method.declaringtype == typeof(queryable))             return node.arguments[0];         else             return base.visitmethodcall(node);     } } 

and:

public static class iqueryableextensions {     public static iqueryable<t> removewhere<t>(this iqueryable<t> expression)     {         var delexpr = expression.lambda<func<iqueryable<t>>>(new whereremovevisitor().visit(expression.expression)).compile();         return delexpr();     } } 

Comments

Popular posts from this blog

javascript - Replicate keyboard event with html button -

node.js - Node js - Trying to send POST request, but it is not loading javascript content -

javascript - Web audio api 5.1 surround example not working in firefox -