94 votes

Requêtes Linq conditionnelle

Nous travaillons sur un Log Viewer. L’utilisation auront la possibilité de filtrer par utilisateur, gravité, etc.. Dans les jours de Sql, je voudrais ajouter à la chaîne de requête, mais j’ai envie de le faire avec Linq. Comment puis-je ajouter conditionnellement clauses where ?

162voto

Darren Kopp Points 27704

Si vous voulez filtrer uniquement si certains critères sont passées, faire quelque chose comme ça

En ce faisant, ça permettra à votre arborescence de l’Expression soit exactement ce que vous voulez. De cette façon le SQL créée sera exactement ce dont vous avez besoin et rien de moins.

24voto

Carlos Points 71

Si vous avez besoin de filtre de base sur une liste / tableau d’utiliser ce qui suit :

20voto

sgwill Points 2444

J’ai terminé à l’aide d’une réponse similaire à de Daren, mais avec un IQueryable interface :

Qui s’accumule la requête avant de frapper la base de données. La commande ne sera pas exécutée jusqu'à. ToList() à la fin.

14voto

Lars Mæhlum Points 4569

Quand il s’agit de linq conditionnelle, je suis très friand de la configuration de filtres et tuyaux.
http://blog.wekeroad.com/MVC-StoreFront/mvcstore-part-3/

Fondamentalement, vous créez une méthode d’extension pour chaque cas de filtre qui prend le IQueryable et un paramètre.

4voto

Brad Leach Points 9012

Une autre option serait d'utiliser quelque chose comme le PredicateBuilder discuté ici. Il vous permet d'écrire du code comme suit:

var newKids  = Product.ContainsInDescription ("BlackBerry", "iPhone");

var classics = Product.ContainsInDescription ("Nokia", "Ericsson")
                  .And (Product.IsSelling());

var query = from p in Data.Products.Where (newKids.Or (classics))
            select p;

Notez que je n'ai que cela fonctionne avec Linq 2 SQL. EntityFramework ne pas mettre en œuvre l'Expression.Invoquer, ce qui est nécessaire pour que cette méthode fonctionne. J'ai une question au sujet de cette question ici.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X