Asp.net core 在IQueryable上应用过滤器的Odata问题
我们正在努力在我们的项目中实施最新的OData。我们正在使用EF核心,我们正在尝试做的是,使用自定义表达式函数作为映射器,将域集映射到Dto模型的新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
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的预期修复程序