我有一个常规 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/