Web APIを使用してAPIを構築しています。ここでは、JSONとしてデータベーステーブルを返します。フィルタリングのためのWeb API動的パラメータ
は、これは私のコントローラのメソッドです:
public List<ExampleDataDTO> ExampleData(int offset = 0, int limit = 0)
{
return DataAccessLayer.GetExampleData(offset, limit);
}
DATAACCESS方法:
public List<ExampleDataDTO> GetExampleData(int offset, int limit)
{
using (var db = new Context())
{
db.Configuration.ProxyCreationEnabled = false;
var exampleQuery = db.example.AsEnumerable().Select(item =>
new ExampleDataDTO
{
//Selects
});
if(offset == 0 && limit == 0)
{
return exampleQuery .ToList();
}
else
{
return exampleQuery .Skip(offset).Take(limit).ToList();
}
}
}
今ExampleDataDTOは、100以上のファイルが含まれている、と私はAPIで任意のフィールドにデータをフィルタリングすることができるようにしたいです。
動的クエリパラメータを作成する方法はありますか?例えば私がlocalhost/api/ExampleData?offset=0&limit=10&name=test1&size=test2
に行くと、私はLINQコードにそれらを含めることができるように名前とサイズのキーと値を取得したいと思っています。
これは実行可能ですか?
EDIT:
IEnumerable<KeyValuePair<String, String>> queryString
は私がすべてのkeyValuePairsをループにしたラムダ式でキーを使用するにはどのような方法がありますように私はすべてのパラメータを得ることができますか? (C = c.Key ==値)はどこのような、
foreach(var queryKeyValuePair in queryString)
{
Something including Where(c => c.queryKeyValuePair.Key == queryKeyValuePair.Value)
}
名前、テスト1、サイズ、テスト2とは何ですか? DTOオブジェクトも共有できますか? –
私は、要求パラメータのさまざまな順列をすべて収容するLINQ文を作成できると確信していますが、LINQが生成しているSQLがうまく機能することを確認したい場合もあります。個人的に、これらのケースでは、私が渡す可能性のあるパラメータを受け入れ、それがさまざまな組み合わせでうまく動作することを保証するためのSQLプロシージャを作成する方が良いことが分かりました。 –
あなたは 'Skip()。Take()'を使っているのが分かります。注文したリストは何ですか?要求を違う順序で、または最悪の場合には、APIのユーザーが適切に注文するように要件が変更される可能性はありますか? –