【问题标题】:Odata problem with applying filter on IQueryable在 IQueryable 上应用过滤器的 Odata 问题
【发布时间】:2020-06-24 11:04:36
【问题描述】:

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

受影响的程序集

Microsoft.AspNetCore.OData v7.3.0

Microsoft.EntityFrameworkCore v3.1.2

.Net Core 3.1 WebApi Project

重现步骤 在控制器中返回的 IQueryable

_dbContext.PurchaseTypes.Select(Mapper.ToDto())

用于映射的表达式函数

public static Expression<Func<PurchaseType, PurchaseTypeDto>> ToDto()
{
    return domain => new PurchaseTypeDto
    {
        Id = domain.Id,
        Code = domain.Code
    };
}

在控制器中,我们有服务调用(返回 IQueryable)并且我们正在应用 ODataQueryOptions 选项。

[HttpGet]
public async Task<IActionResult> Get(ODataQueryOptions<PurchaseTypeDto> opts)
{
    var query = opts.ApplyTo(_purchaseTypeService.GetAll()) as Queryable<PurchaseTypeDto>;

    var result = await query.ToListAsync();

    return Ok(result);
}

预期结果 当url访问https://localhost:44361/odata/PurchaseType?%24filter=Id%20eq%202时, 执行查询并返回结果

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

InvalidOperationException: The LINQ expression
'DbSet
.Where(p => new PurchaseTypeDto(
p.Id,
p.Code
).Id == __TypedProperty_0)' 
could not be translated.

【问题讨论】:

    标签: asp.net-core .net-core odata asp.net-core-webapi ef-core-3.1


    【解决方案1】:

    这是 EF Core 错误。 https://github.com/dotnet/efcore/issues/19087 现在您可以将 EF Core 降级到 2.2.6。 3.1.4 版的预期修复

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-15
      • 2020-06-13
      • 2021-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多