2017-10-03 77 views
5

Potrzebuję stworzyć funkcjonalność, która pozwoliłaby użytkownikom filtrować jednostki za pomocą dosłownych zapytań (np. age gt 20 and name eq 'john'). Czy jest dostępna funkcja do tego celu w C#/Asp.Net MVC, czy też muszę samemu przeanalizować to zapytanie?Jak filtrować podmioty za pomocą zapytań w języku C#?

Odkryłem, że OData sugeruje posiadanie właśnie takiej funkcji (OData Filter Expressions MSDN). Jednak nie jestem zaznajomiony z tym, więc nie wiem, jak wdrożyć takie zachowanie w moim projekcie.

muszę coś takiego:

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 

Wszelkie porady będą mile widziane.

Odpowiedz

2

Na Nuget znajduje się pakiet o nazwie Linq2Rest, który zawiera metodę rozszerzenia dla IEnumerable o nazwie Filter. Możesz podać ciąg filtra, którego potrzebujesz, aby filtr się wydarzył. Wewnętrznie zostanie przekształcony w Expression Tree i będzie używany z istniejącymi istniejącymi metodami rozszerzenia.

Dla próbki:

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

Zobacz ten artykuł Creating a .Net queryable client for ASP.Net Web API oData services o tym, jak radzić sobie z tego rodzaju problemu z wykorzystaniem bibliotek JSON.Net i Linq2Rest aby rozwiązać ten problem.