2010-03-29 6 views
2

Si j'ai une requête comme ceci:Existe-t-il un moyen d'ajouter ou de supprimer une ligne d'une requête LINQ to DB en fonction de si la valeur vérifiée est null?

String Category = HttpContext.Current.Request.QueryString["Product"].ToString(); 

IQueryable<ItemFile> pressReleases = from file in connection.ItemFile 
                  where file.Type_ID == 8 
                   && file.Category == Category 
                  select file; 

est-il un moyen de faire de cette requête LINQ pour que je ne pas utiliser la ligne file.Category == Category si la catégorie est nul ou vide?

Répondre

3

Que diriez-vous ne pas ajouter que where à moins que vous devez?

IQueryable<ItemFile> pressReleases = from file in connection.ItemFile 
            where file.Type_ID == 8 
            select file; 

if(!string.IsNullOrEmpty(Category)) { 
    pressReleases = pressReleases.Where(file => file.Category == Category); 
} 

Cela fonctionne parce que les requêtes LINQ sont composables avec exécution différée, de sorte que ce filtre est toujours partie du TSQL final.

+0

Merci! J'apprécie l'aide! –

2

Cela pourrait ne pas être exactement ce que vous vouliez mais rendre le même résultat:

String Category = HttpContext.Current.Request.QueryString["Product"].ToString(); 

IQueryable<ItemFile> pressReleases = from file in connection.ItemFile 
            where file.Type_ID == 8 
            && (string.IsNullOrEmpty(Category) || file.Category == Category) 
            select file; 
+0

Sani, je pense que l'OP est concerné où "Catégorie" est nulle ou vide, pas file.Category. Si oui, je pense que votre solution exclurait certains éléments qui devraient être inclus. – itsmatt

+0

Vous avez raison ... Modifié ... –