c# – 检测应用于IQueryable的位置

前端之家收集整理的这篇文章主要介绍了c# – 检测应用于IQueryable的位置前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何检测IQueryable< T>有一个where过滤器应用?

在这段代码中,我需要以编程方式知道queryFiltered有一个应用于它的地方而查询没有

IQueryable<Customer> query = Context.Customers;
IQueryable<Customer> queryFiltered = Context.Customers
                                            .Where(c=>c.Name.Contains("ABC"));

解决方法

您必须解析 IQueryable<T>实施中从 Expression property返回的 Expression.

在爬行Expression树时,您必须查询调用Queryable.Where method.

另请注意,虽然Queryable.Where将是检测where过滤器的最常用方法,但查询语法允许使用其他实现(取决于using directives中使用的名称空间);如果你有一些没有使用Queryable.Where扩展方法的东西那么你必须明确地寻找它(或者使用更通用的过滤方法来过滤一个带有IQueryable< T>并返回IQueryable< T>的Where方法).

ExpressionVisitor class(如pointed out by xanatos)提供了一种非常简单的爬行表达式树的方法,我强烈建议使用该方法作为处理表达式树的基础.

值得注意的是,ExpressionVisitor类实现需要在类级别上存储和公开状态.因此,最好(IMO)创建一次性执行操作的内部类,然后使用一个公共方法,每次都创建一个ExpressionVisitor的新实例;这将有助于处理变异状态,如果正确完成,将允许该方法也是线程安全的(如果这是您的关注).

猜你在找的C#相关文章