我设法做到了如下:
ODataPath path = Request.GetODataPath();
IEdmType edmType = path.EdmType;
private ODataQueryOptions GetODataQueryOptions(IEdmType edmType)
{
IEdmModel model = Models.ModelBuilder.GetEdmModel();
ODataQueryContext queryContext = new ODataQueryContext(model, edmType);
ODataQueryOptions queryOptions = new ODataQueryOptions(queryContext, this.Request);
return queryOptions;
}
这适用于大多数查询选项,但会因 $select 和 $expand 崩溃:类型“Collection([Org.Microsoft.Product Nullable=False])”不是实体类型。只有实体类型支持 $select 和 $expand。当客户端尝试使用 $select 和 $expand 进行过滤时,有没有办法优雅地避免这个异常,或者我应该写类似的东西
if (Request.RequestUri.Query.Contains("select")) { return errormessage }
此外,更重要的是,如何将这些查询选项应用于在第一种方法中返回的EdmEntityObjectCollection ?
queryOptions.ApplyTo(collectionProduct.AsQueryable()); // wont work...
(无论如何,动态构建关于查询选项的集合可能是更好的做法)