OData从Apply内部的FilterClause获取Linq表达式

问题描述

组装版本:

Microsoft.AspNetCore.OData 7.4.1
Microsoft.EntityFrameworkCore 2.2.6

我有一个如下的OData Uri请求:

$apply=filter(my_field eq 'A VALUE' and creation_date gt 2020-06-01 and creation_date lt 2020-07-10)/groupby((response_statuscode),aggregate($count as count)) 

由于引擎中缺乏优化,此OData请求将在内存中执行。
我有一个约束,不能更改EFCore版本。

filter子句位于apply子句的内部。我执行以下代码从apply子句中的filter子句中提取Linq表达式:

if(query.Apply != null && query.Apply.ApplyClause.Transformations.Any(t=> t.Kind == TransformationNodeKind.Filter))
    {
        var bind = new Microsoft.AspNet.OData.Query.Expressions.FilterBinder(query.Context.RequestContainer);
        foreach (var item in query.Apply.ApplyClause.Transformations.Where(t => t.Kind == TransformationNodeKind.Filter))
        {
            var expr = bind.Bind(((FilterTransformationNode)item).FilterClause.Expression);
        }
    }

查询一个ODataQueryOptions<MY-POCO-OBJECT>

我的代码在执行“绑定”部分bind.Bind(((FilterTransformationNode)item).FilterClause.Expression)时引发System.NullReferenceException。

在这种情况下,如何提取由解析器评估的表达式?我已经能够从query.Filter成员中提取它,但这是另一种情况,其中我在apply子句中有过滤器。我想在查询评估之前 之前将过滤器表达式应用于上下文,以便优化性能

有人可以帮助我理解正确的方法吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)