2009-04-16 20 views
10

¿Es posible escribir una instrucción LINQ con una cláusula de grupo condicional? Aquí es básicamente lo que estoy tratando de hacer:LINQ Grupo condicional

bool someFlag = false; 

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

Así que, básicamente, si someflag se establece en true, quiero grupo solamente por FieldB, pero si es falsa Quiero grupo por FieldA y FieldB.

+0

¿Son FieldA y FieldB del mismo tipo? Si es así, eso puede simplificar mucho las cosas. – Noldorin

+0

Además, supongo que someFlag depende del elemento actual? – Noldorin

+0

Sí, FieldA y FieldB son ambos enteros. Y someFlag se pasará como un parámetro para el método. – MrDustpan

Respuesta

20

compañero de trabajo lo descubrió para mí:

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

Puede dejar todo después de "}". No tiene que seleccionar explícitamente elementos agrupados. –

0

En el caso de que su someFlag no depende de una variable en el elemento actual del iterador, entonces creo que podría hacer que el código sea más legible escribiendo lo siguiente.

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

Es cierto que es un poco más largo, pero su propósito es mucho más evidente en mi opinión.

Y para simplificar un poco el código que acaba de publicar:

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

... o estoy perdiendo algo?