c# - 在核心的 odataqueryoptions 中处理选择?

标签 c# .net asp.net-core visual-studio-2017 odata

我有一个常规 Controller ,它具有 odata 功能:

[Route("[controller]")]
public class ChannelsController : Controller
{
    private readonly ChannelContext db = new ChannelContext();
    public IQueryable<PrdChannel> Get()
    {
        var entities = db.PrdChannel.AsQueryable();
        var modelManager = (IODataModelManger) HttpContext.RequestServices.GetService(typeof(IODataModelManger));
        var model = modelManager.GetModel(nameof(ProductConfiguration));
        var queryContext = new ODataQueryContext(model, typeof(PrdChannel), null);
        var queryOptions = new ODataQueryOptions(queryContext, HttpContext.Request);

        return queryOptions
            .ApplyTo(entities, new ODataQuerySettings
            {
                HandleNullPropagation = HandleNullPropagationOption.True
            })
            .Cast<PrdChannel>();
    }
}

我可以发出 GET:https://myservice/Channel?$filter=cable lt 10

但是,当我尝试执行 $select 时,它不起作用!

https://myservice/Channel?$select=cable

根据 OdataQueryOptions 的定义,它不支持选择/扩展。

问题:aspnetcore如何支持$select

也许这应该是一个 ODataController?

最佳答案

重复:Can't apply $select when using ODataQueryOptions

要允许在 OData 中支持 $select,您不能将 IQueryable 强制转换为已定义的类型,您需要改用 dynamic 类型。

    public IQueryable<dynamic> Get()
    {
        ... your code ...
        return queryOptions
            .ApplyTo(entities, new ODataQuerySettings
            {
                HandleNullPropagation = HandleNullPropagationOption.True
            })
            as IQueryable<dynamic>;
    }

关于c# - 在核心的 odataqueryoptions 中处理选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47104550/

相关文章:

c# - 在控制台应用程序中,防止命令行参数中的特殊序列被转义的最佳方法是什么?

.net - 从 Azure Web API 使用 Azure Analysis Services 数据

.net - 为什么.Net 应用程序启动速度较慢?

c# - .NET 隔离存储文件锁定引发 NRE

从数据库一直到 AngularJS 常量的 C# 枚举

azure - ASP.NET Core 3.1 Web API(版本控制)和 Swagger UI 由于 MvcJsonOptions 发布到 Azure 后失败

visual-studio-2015 - 类库项目中的目标框架 dnx451 或 net451

c# - 如何在C#中将字符串转换为int数组

c# - NASA Asterank 请求每次返回相同

c# - Foreach 将集合强制转换为 IEnumerable 的工作比不强制转换慢?