2017-10-03 9 views
5

Je dois créer une fonctionnalité qui permettrait aux utilisateurs de filtrer des entités à l'aide de requêtes littérales (par exemple, age gt 20 and name eq 'john'). Y at-il une fonctionnalité fournie pour faire cela dans C#/Asp.Net MVC ou dois-je analyser cette requête moi-même?Comment filtrer les entités en utilisant des requêtes en C#?

J'ai trouvé que OData implique d'avoir exactement une telle fonctionnalité (OData Filter Expressions MSDN). Cependant, je ne suis pas familier avec cela donc je ne sais pas comment implémenter un tel comportement dans mon projet.

je besoin de quelque chose comme ceci:

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 

Tout conseil serait apprécié.

Répondre

2

Il existe un package sur Nuget appelé Linq2Rest, qui contient une méthode d'extension pour IEnumerable appelée Filter. Vous pouvez passer la chaîne du filtre dont vous avez besoin pour que le filtre arrive. En interne, il sera converti en un Expression Tree et sera utilisé avec les méthodes d'extension ienumerable existantes.

échantillon:

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

Voir cet article Creating a .Net queryable client for ASP.Net Web API oData services sur la façon de traiter ce type de problème à l'aide des bibliothèques JSON.Net et Linq2Rest pour résoudre ce problème.