Consolidez plusieurs conditions si dans une seule instruction LINQ si possible

J’utilise actuellement ASP.NET MVC et Entity Framework Code. Premièrement, j’utilise le modèle de référentiel pour afficher une simple liste d’utilisateurs disposant d’une pagination. J’ajoute la possibilité de filtrer cette liste en permettant à l’utilisateur final de sélectionner des conditions parmi deux listes déroulantes et deux zones de texte avec une date de début et une date de fin.

Y a-t-il un meilleur moyen de faire cela que le code ci-dessous où je dois tester toutes les combinaisons possibles de parameters afin d’écrire la requête LINQ appropriée:

public IEnumerable GetAllByCondition(int? condition1, int? condition2, DateTime? startDate, DateTime? endDate) { if (condition1.HasValue && startDate.HasValue && endDate.HasValue) { return Database.Set().Where(x => x.Condition1 == condition1.Value && x.Date > startDate.Value && x.Date <= endDate.Value).ToList(); } if (condition1.HasValue && condition2.HasValue) { return Database.Set().Where(x => x.Condition1 == condition1.Value && x.Condition2 == condition2.Value).ToList(); } if (condition1.HasValue) { return Database.Set().Where(x => x.Condition1 == condition1.Value).ToList(); } .... and the list goes on } 

Cela peut rapidement devenir gonflé si j’ajoute une condition supplémentaire dans le futur.

Utilisez le fait que les requêtes composent – vous pouvez simplement continuer à appeler Where append d’autres conditions:

 var query = Database.Set(); if (condition1.HasValue) { query = query.Where(x => x.Condition1 == condition1.Value); } if (condition2.HasValue) { query = query.Where(x => x.Condition2 == condition2.Value); } ... return query.ToList();