2010-09-14 4 views
0

C'est le genre de chose que je veux être capable de faire. Je sais que vous pouvez encore interroger les résultats de Linq, mais parce que ces résultats sont en groupes, je ne sais pas comment. Je pense que la meilleure idée à laquelle je peux penser est d'avoir une requête pour tout récupérer, puis de faire mon instruction if, puis de faire une autre requête qui regroupe tout (donc avoir 3 requêtes distinctes au lieu de 1). Des idées sur la meilleure façon de faire ce genre de chose?Requête LINQ qui peut changer mais peut grouper?

var Result = 
    from a in DB.Table 

    if(Something == 0) 
    { 
     where a.Value > 0 
    } 

    group a by a.Value into b 
    select new {Group = b}; 

Répondre

1
var result = from a in DB.Table; 

if (Something == 0) 
{ 
result = result.Where(r => r.Value > 0); 
} 

var finalResult = 
from a in result 
group a by a.Value into b 
select new {Group = b}; 
+0

La première déclaration nécessite un select? – sooprise

+0

vous n'avez pas vraiment besoin du select, mais vous pourriez en avoir un. Le point est qu'il devrait être IQueryablew

. Si vous faites result = d'un dans DB.Table sélectionnez un ou simplement d'un dans DB.Table, les deux ont un type de retour de IQueryable
Jeff

+0

@Soo juste faire d'un dans DB.Table sélectionnez un ... ou Db.Table .AsQueryable(), autre que cette réponse est celle-ci. +1 – eglasius

0

Vous pouvez limiter les requêtes LINQ avec des déclarations "où". Essayez d'exerimenter avec ça. quelque chose comme:

var res = de c dans db.table Où c.Id == 1 Sélectionnez c

1

Ne serait-ce faire ce que vous cherchez?

 var result = 
     from a in DB.Table 
     group a by a.Value into g 
     where !Something.Equals(0) || g.Key > 0 
     select new { Group = g }; 
+0

+1 pour la concision – cordialgerm

Questions connexes