加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 06:27:23 所属栏目:百科 来源:网络整理
导读:如何检测IQueryable T有一个where过滤器应用? 在这段代码中,我需要以编程方式知道queryFiltered有一个应用于它的地方而查询没有 IQueryableCustomer query = Context.Customers;IQueryableCustomer queryFiltered = Context.Customers .Where(c=c.Name.Cont
如何检测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的新实例;这将有助于处理变异状态,如果正确完成,将允许该方法也是线程安全的(如果这是您的关注).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读