2009-04-16 8 views
10

Est-il possible d'écrire une instruction LINQ avec une clause de groupe conditionnelle? Voici essentiellement ce que je suis en train de faire:LINQ Groupe conditionnel

bool someFlag = false; 

var result = from t in tableName 
    group t by new { (someFlag ? 0 : t.FieldA), t.FieldB } into g 
    select g; 

Donc, fondamentalement, si someFlag est définie sur true, je veux seulement par groupe FieldB, mais si elle est fausse, je veux groupe par FieldA et FieldB.

+0

FieldA et FieldB sont-ils du même type? Si oui, cela peut grandement simplifier les choses. – Noldorin

+0

Aussi, je suppose que someFlag dépend de l'élément actuel? – Noldorin

+0

Oui, FieldA et FieldB sont tous les deux des entiers. Et someFlag serait passé en paramètre de la méthode. – MrDustpan

Répondre

20

Collègue pensé à elle pour moi:

bool someFlag = false; 
var result = from t in tableName 
    group t by new { FieldA = (someFlag ? 0 : t.FieldA), t.FieldB } into g 
    select g; 
+1

Vous pouvez laisser tout après le "}". Vous n'avez pas explicitement à sélectionner des éléments groupés. –

0

Dans le cas où votre someFlag n'est pas une personne à charge variable sur l'élément courant de l'itérateur, alors je pense que vous pouvez rendre votre code plus lisible par écrire ce qui suit. Certes, il est légèrement plus long, mais son but est nettement plus évident à mon avis.

Et pour simplifier un peu le code que vous venez d'envoyer:

bool someFlag = false; 
var result = from t in tableName 
    group t by (someFlag ? t.FieldA : t.FieldB) into g 
    select g; 

... ou suis-je manque quelque chose ici?