2010-10-06 3 views
0

J'ai une liste déroulante qui, lorsqu'elle est sélectionnée, extrait les données d'une base de données. Il y a beaucoup d'options dans la liste déroulante et l'une d'elles est "Tout". Je veux que lorsque l'utilisateur sélectionne l'option "Tous", il devrait tout sortir de la base de données. Quel est un bon moyen d'implémenter cette fonctionnalité?Requêtes Linq conditionnelles

Répondre

7

Avec LINQ, vous pouvez modifier facilement une requête avant de l'envoyer à la base de données:

IQueryable<Item> query = dataContext.Items; 

if (selectedText != "All") 
{ 
    query = query.Where(item => item.Type == selectedText); 
} 

List<Item> result = query.ToList(); 

Sinon, vous pouvez l'écrire dans une seule requête:

IQueryable<Item> query = dataContext.Items 
    .Where(item => selectedText == "All" || item.Type == selectedText); 
+0

ou peut-être: query.Where (item => selectedText == "Tous" || item.Type == selectedText); –

+1

@mgroves: Merci, ajouté. –

1

Vérifiez la valeur et exécutez uniquement l'instruction Where sinon "Tous".

var linqQuery = ... 
if (selectedValue != "All") 
    linqQuery = linqQuery.Where(w => w.Value == selectedValue); 
0

Si vous êtes En développant dynamiquement vos requêtes, vous voudrez peut-être jeter un coup d'œil à l'un des exemples vraiment intéressants de Linq, "la bibliothèque Dynamic Linq". Scott Guthrie a un joli blog post à ce sujet. Editer: Notez que dans ce cas précis, vous êtes sur le côté droit de la clause where, vous n'avez pas besoin d'être complètement dynamique et cela serait excessif, mais si vous avez une situation où vous filtrez aussi dynamiquement , alors .....