【问题标题】:OData filter on enum枚举上的 OData 过滤器
【发布时间】:2021-02-02 15:11:35
【问题描述】:

我正在尝试将 OData 与 .NET Core WebApi 项目一起使用。因为我想控制输出的格式,所以我采取了一种可能不是很传统的方法,并且在我的操作中,我收到了一个 ODataQueryOptions 输入,我将其应用于我的数据源——一个通过 EF Core 公开的 CosmosDb 集合。 代码方面,我在启动时有类似的东西:

public void ConfigureServices(IServiceCollection services)
    {
        ....
        services.AddOData();
        ....
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        ....

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
            endpoints.EnableDependencyInjection();
            /* tried even
            endpoints.EnableDependencyInjection(builder =>
            {
                builder.AddService(Microsoft.OData.ServiceLifetime.Singleton, typeof(ODataUriResolver), sp => new StringAsEnumResolver());
            });
            */
            endpoints.Filter();
        });
        ...
}

控制器很简单:

namespace Tacx.Backend.Activity.Api.Controllers
{

[Route("api/activities/search")]
[ApiController]
public class SearchController : ControllerBase
{
    private readonly ActivityContext _db;
    private readonly IMapper _mapper;

    public SearchController(ActivityContext db, IMapper mapper)
    {
        _db = db;
        _mapper = mapper;
    }

    [HttpGet]        
    public async Task<List<ActivitySummaryDTO>> GetActivities(ODataQueryOptions<Domain.Models.Activity> opts)
    {
        try
        {
            var odataResult = opts.ApplyTo(_db.Activities.AsQueryable());
            var activities = odataResult as IQueryable<Domain.Models.Activity>;
            var activitiesDto= _mapper.Map<List<ActivitySummaryDTO>>(activities);                
            return activitiesDto;
        }
        catch(Exception ex)
        {
            throw ex;
        }
    }
}
}

如果我对字符串、GUID 或数字的属性进行过滤,这会很好。每当我尝试对枚举字段运行过滤器时(它们以字符串形式存储在 CosmosDB 中),我都会遇到问题......

我一直在尝试使用 $filter=MyPropertyEnum eq 'enumValue' 等过滤器,但出现错误:Invalid cast from 'System.Int32' to 'Activity.Domain.Enums.MyPropertyEnum'.

我一直在尝试在 Google 上寻求解决方案,但到目前为止找不到任何解决方案...欢迎任何帮助或建议。 谢谢!

【问题讨论】:

  • 也许你可以看到这个link,希望它能帮助你。
  • @yinqiu 就是这样......我不敢相信:|最糟糕的是他们不打算在 3.x.x 中实现它,所以我不得不拿一个 RC.... 非常感谢!请添加回复,以便我接受并关闭此问题。再次感谢!

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


【解决方案1】:

这已在 EF Core 5.0 中为 Cosmos 修复。目前,该功能在 3.xx 中未修复。

可能你可以看到this链接,希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-18
    • 2019-12-18
    • 2018-04-22
    • 2022-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    相关资源
    最近更新 更多