首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ODataQueryOptions在TypeLess (UnTyped)对象在ASP.NET WebApi / OData项目中的应用

ODataQueryOptions在TypeLess (UnTyped)对象在ASP.NET WebApi / OData项目中的应用
EN

Stack Overflow用户
提问于 2015-07-06 22:18:36
回答 1查看 1.7K关注 0票数 1

我指的是Asp.net WebApi 2.2对OData的支持。WebApi处理大量与、OData、V4、协议相关的内容是非常有趣的。

我需要在没有CLR对象的情况下实现Odata服务。我在运行时了解了类的属性。就像我有存储Sql查询的xml文件一样。我读取这些xml文件并在其中执行查询。在读取了XML文件之后,我实现了这些列,并希望在OData服务下公开这些信息。

我一直面临的挑战是,我无法将ODataQueryOptions应用于非类型化(非CLR)对象。

示例代码https://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/OData/v4/ODataUntypedSample/ReadMe.txt展示了如何从WebApi OData服务公开非类型化对象,但没有展示如何应用ODataQueryOptions。

代码语言:javascript
复制
public class ProductsController : ODataController
  {
    private static IQueryable<IEdmEntityObject> Products = Enumerable.Range(0, 20).Select(i =>
    {
      IEdmEntityType productType = (IEdmEntityType)ODataUntypedModel.Model.FindType("AnalyticsPortal.Product");

      EdmEntityObject product = new EdmEntityObject(productType);
      product.TrySetPropertyValue("Id", i);
      product.TrySetPropertyValue("Name", "Product " + i);
      product.TrySetPropertyValue("Price", i + 0.01);
      product.TrySetPropertyValue("Category", "Category - " + i);

      return product;
    }).AsQueryable();

    ///*
    public EdmEntityObjectCollection Get()
    {


      //return productsContext.Products.AsQueryable();

      var path = Request.ODataProperties().Path;
      var edmType = path.EdmType;
      var collectionType = edmType as IEdmCollectionType;
      var entityType = collectionType.ElementType.Definition as IEdmEntityType;
      var model = Request.ODataProperties().Model;
      var queryContext = new ODataQueryContext(model, entityType, path);
      var queryOptions = new ODataQueryOptions(queryContext, Request);



      //Apply the query option on the IQueryable here.
      //queryOptions
      //How ??
      //queryOptions.ApplyTo() work only on CLR types

      //IQueryable<IEdmEntityObject>

      return new EdmEntityObjectCollection(new EdmCollectionTypeReference(collectionType), Products.ToList());
    }
    //*/
  }

如果有人能告诉我一些框架或插件可以处理OData查询选项(筛选、选择、订购等),我会很感激。

EN

回答 1

Stack Overflow用户

发布于 2015-07-07 07:53:48

恐怕你必须亲自运用它们。只有当您公开一个具体类型的IQueryable (通常通过EF)时,它才会为您应用它们,但是如果您没有这种类型,那么它将不知道如何应用它,因为您可以从任何地方获取数据!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31256631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档