Условная группа 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.


person MrDustpan    schedule 16.04.2009    source источник
comment
Являются ли поля FieldA и FieldB одного и того же типа? Если да, то это может сильно упростить ситуацию.   -  person Noldorin    schedule 16.04.2009
comment
Кроме того, я предполагаю, что someFlag зависит от текущего элемента?   -  person Noldorin    schedule 16.04.2009
comment
Да, FieldA и FieldB оба являются целыми числами. И someFlag будет передан в качестве параметра метода.   -  person MrDustpan    schedule 16.04.2009


Ответы (2)


Сотрудник понял это для меня:

bool someFlag = false;
var result = from t in tableName
   group t by new { FieldA = (someFlag ? 0 : t.FieldA), t.FieldB } into g
   select g;
person MrDustpan    schedule 16.04.2009
comment
Вы можете оставить все после }. Вам не нужно явно выбирать сгруппированные элементы. - person Bryan Watts; 16.04.2009

В случае, если ваш someFlag не является переменной, зависящей от текущего элемента итератора, я думаю, вы могли бы сделать свой код более читабельным, написав следующее.

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;

... или я что-то пропустил здесь?

person Noldorin    schedule 16.04.2009