2016-07-23 93 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