Asp.net core 在IQueryable上应用过滤器的Odata问题

Asp.net core 在IQueryable上应用过滤器的Odata问题,asp.net-core,.net-core,odata,asp.net-core-webapi,ef-core-3.1,Asp.net Core,.net Core,Odata,Asp.net Core Webapi,Ef Core 3.1,我们正在努力在我们的项目中实施最新的OData。我们正在使用EF核心,我们正在尝试做的是,使用自定义表达式函数作为映射器,将域集映射到Dto模型的新IQueryable。应用OData筛选器后,查询将中断,无法执行 受影响的集会 Microsoft.AspNetCore.OData v7.3.0 Microsoft.EntityFrameworkCore v3.1.2 .Net Core 3.1 WebApi Project 复制步骤 在控制器中返回的IQueryable \u dbCon

我们正在努力在我们的项目中实施最新的OData。我们正在使用EF核心,我们正在尝试做的是,使用自定义表达式函数作为映射器,将域集映射到Dto模型的新IQueryable。应用OData筛选器后,查询将中断,无法执行

受影响的集会

Microsoft.AspNetCore.OData v7.3.0

Microsoft.EntityFrameworkCore v3.1.2

.Net Core 3.1 WebApi Project
复制步骤 在控制器中返回的IQueryable

\u dbContext.PurchaseTypes.Select(Mapper.ToDto())
用于映射的表达式函数

公共静态表达式ToDto()
{
返回域=>new PurchaseTypeDto
{
Id=domain.Id,
代码=域。代码
};
}
在控制器中,我们有服务调用(返回IQueryable),我们正在应用ODataQueryOptions选项

[HttpGet]
公共异步任务Get(ODataQueryOptions选项)
{
var query=opts.ApplyTo(_purchaseTypeService.GetAll())可查询;
var result=wait query.ToListAsync();
返回Ok(结果);
}
预期结果 当访问url时, 执行查询并返回结果

实际结果 无法执行创建的查询

InvalidOperationException: The LINQ expression
'DbSet
.Where(p => new PurchaseTypeDto(
p.Id,
p.Code
).Id == __TypedProperty_0)' 
could not be translated.
这是EF的核心缺陷。目前,您可以将EF Core降级为2.2.6。版本3.1.4的预期修复是EF核心缺陷。目前,您可以将EF Core降级为2.2.6。版本3.1.4的预期修复程序