2013-04-02 31 views
4

這裏返回動態是我的控制器代碼:如何啓用分揀OData服務在asp.net的MVC Web API

public class RegularGrigController : ApiController 
    { 
     // GET api/regulargrig 
     public IEnumerable<string> Get() 
     { 
      return EntityHelper.GetEntities().Select(t => t.ModelName()); 
     } 

     public PageResult<dynamic> Get(string entityName, ODataQueryOptions options) 
     { 
      var query = EntityHelper.GetQueryable(entityName).Select("new (Id, SysName)"); // Dynamic queryable 

      IQueryable results = options.ApplyTo(query); // Exception here 

      return new PageResult<dynamic>(results as IEnumerable<dynamic>, Request.GetNextPageLink(), Request.GetInlineCount()); 
     } 
    } 

當我嘗試撥打這通電話/api/RegularGrig?entityName=SecurityPrincipal&$orderby=Id

我收到此例外

Type 'System.Object' does not have a property 'Id' 

那麼,有什麼辦法來排序/過濾動態數據?

回答

2

此代碼現在工作對我來說:

public PageResult<dynamic> Get(string entityName) 
{ 
    var query = EntityHelper.GetQueryable(entityName).Select("new (Id, SysName)"); 
    var modelBuilder = new ODataConventionModelBuilder(); 
    modelBuilder.AddEntity(query.ElementType); 
    var model = modelBuilder.GetEdmModel(); 
    var options = new ODataQueryOptions(new ODataQueryContext(model, query.ElementType), this.Request); 
    IQueryable results = options.ApplyTo(query); 

    return new PageResult<dynamic>(results as IEnumerable<dynamic>, Request.GetNextPageLink(), Request.GetInlineCount()); 
}