2016-07-23 100 views
0

当我如下定义我的终点API时,返回所有列,oData $ filter,$ Skip,$ filter正常工作。C#Web API oData过滤器失败

[EnableQuery] 
     public IQueryable<MyList> GetMyLists() 
     { 
      return db.MyLists;//directly from entity table 
     } 

但是,当我只选择如下所示的某些列时,oData $ filter,$ Skip,$ filter fail。有任何想法吗?

public IQueryable<MyResult> GetMyLists() 
     { 
      return db.MyLists.Select(x => new MyResult 
      { 
       Trade_Name = x.Trade_Name, 
       price = x.price, 
       remarks = x.remarks, 
       Comment = x.Comment, 
       GenericGroupNumber = x.GenericGroupNumber 
      }); 
     } 

我定义MyResult类如:

public class MyResult 
    { 
     public string Trade_Name; 
     public decimal? price; 
     public string remarks; 
     public string Comment; 
     public string GenericGroupNumber; 

    } 

任何指导是不胜感激。

回答

0

类MyResult没有[key]列,也没有映射到EDMX模型中的表格。它被认为是一个复杂的实体(比如存储过程)。 所以你不能应用$ filter,$ skip。

0

的OData被设计在WebApiConfig.cs文件EDMX模型中描述的实体合作,那以外的任何实体将不会允许你申请$过滤器,$跳过,等

您需要在您的EDMX模型中定义该实体,并将其放置在它自己命名的控制器中,并根据实体名称进行操作。

class MyResultsController : ApiController { 
    public IQueryable<MyResult> GetMyResults() 
    { 
     return db.MyLists.Select(x => new MyResult 
     { 
      Trade_Name = x.Trade_Name, 
      price = x.price, 
      remarks = x.remarks, 
      Comment = x.Comment, 
      GenericGroupNumber = x.GenericGroupNumber 
     }); 
    } 
} 

然后确保你在WebApiConfig正确映射MyResult