如何解决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 举报,一经查实,本站将立刻删除。