2017-10-03 19 views
5

ユーザーがリテラルクエリ(つまりage gt 20 and name eq 'john')を使用してエンティティをフィルタできるようにする機能を作成する必要があります。 C#/ Asp.Net MVCでこれを行うための提供された機能はありますか、このクエリを自分で解析する必要はありますか?C#でクエリを使用してエンティティをフィルタする方法は?

ODataが正確にそのような機能を持つことを意味することがわかりました(OData Filter Expressions MSDN)。しかし、私はそれに精通していないので、私はどのように私のプロジェクトでそのような動作を実装するのか分からない。何かアドバイスをいただければ幸いです

var list = new List<Person> 
{ 
    new Person { Name = "John", Age = 30 }, 
    new Person { Name = "Hanna", Age = 25 }, 
    new Person { Name = "John", Age = 15 } 
}; 

string query = "age gt 20 and name eq /'John/'"; 
IEnumerable<Person> result = list.FilterByExpression(query); 
// returns list with John aged 30 

私はこのようなものが必要。

答えて

2

というIEnumerableの拡張方法を含むLinq2RestというパッケージがNugetにあります。フィルタを作成するために必要なフィルタの文字列を渡すことができます。内部的にはExpression Treeに変換され、存在するienumerable拡張メソッドとともに使用されます。サンプルについて

var filteredSource = source.Filter(Request.Params); 

この問題を解決するためのライブラリJSON.NetLinq2Restを使用して、この種の問題に対処する方法については、この記事Creating a .Net queryable client for ASP.Net Web API oData servicesを参照してください。

関連する問題