2009-04-16 17 views
10

Koşullu grup cümlesi olan bir LINQ deyimi yazmak mümkün mü? someFlag true olarak ayarlanırsa, LINQ Koşullu Grup

bool someFlag = false; 

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

Yani temelde, sadece Fieldb göre gruplandırmak istiyorum, ama bu yanlış bile olsa FieldA ve Fieldb göre gruplandırmak istiyorum: Burada temelde ben bunu yapmaya çalışıyorum ne.

+0

Aynı türden FieldA ve FieldB var mı? Eğer öyleyse, bu şeyleri büyük ölçüde basitleştirebilir. – Noldorin

+0

Ayrıca, bazıFlag'ın geçerli öğeye bağlı olduğunu mu varsayıyorum? – Noldorin

+0

Evet, FieldA ve FieldB hem tamsayılardır. Ve bazıFlag, yönteme bir parametre olarak geçirilecekti. – MrDustpan

cevap

20

İş arkadaşı benim için bunu anladım: En someFlag değil Yineleyici mevcut elemana değişken bağımlı durumda

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

"}" ifadesinden sonra her şeyi bırakabilirsiniz. Açıkça gruplandırılmış öğeleri seçmek zorunda değilsiniz. –

0

, o zaman yaparak kod daha okunabilir hale düşünüyorum aşağıdakileri yazmak.

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); 

Kuşkusuz bu biraz daha uzun, ama onun amacı bence çok daha açıktır.

Ve biraz sadece yayınlanmıştır kodu basitleştirmek için:

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

... ya burada bir şey eksik?