2016-07-23 6 views
0

エンドポイントAPIを以下のようにすべての列を返すように定義すると、oData $ filter、$ Skip、$ filterが正常に動作します。C#Web API oData Filter fail

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

ただし、次のような特定の列のみを選択すると、oData $ filter、$ Skip、$ filterが失敗します。何か案は?

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には[キー]列がなく、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をマッピングすることを確認してください。

関連する問題