2009-04-16 17 views
10

条件付きグループ句を使用してLINQステートメントを記述することはできますか?ここで私は何をしようとしている基本的には次のとおりです。LINQ条件付きグループ

bool someFlag = false; 

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

そこで、基本的someFlagがtrueに設定されている場合、私はFIELDBによってグループ化したいが、それは偽だ場合、私はFIELDAとFIELDBによってグループ化します。

+0

FieldAとFieldBは同じタイプですか?もしそうなら、事を大幅に簡素化することができます。 – Noldorin

+0

また、someFlagは現在の要素に依存していると思いますか? – Noldorin

+0

ええ、FieldAとFieldBは両方とも整数です。 someFlagはメソッドのパラメータとして渡されます。 – MrDustpan

答えて

20

同僚が私のためにそれを考え出し:あなたのsomeFlagはないイテレータの現在の要素に依存する変数である場合には

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

"}"の後にすべてを残すことができます。グループ化された項目を明示的に選択する必要はありません。 –

0

、その後、私はあなたがすることによってあなたのコードをより読みやすくすることができると思います次のように書いてください。

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

確かにそれは少し長くなりますが、その目的は明らかに私の意見ではっきりしています。

そして少しあなただけの投稿コード簡素化する:

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

を...または私はここで何かが足りないのですか?