Подтвердить что ты не робот

LINQ Conditional Group

Можно ли написать оператор 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, но если он false, я хочу сгруппировать по FieldA и FieldB.

4b9b3361

Ответ 1

Сотрудник вычислил это для меня:

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

Ответ 2

В случае, если ваш 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;

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