LINQ Условная группа - PullRequest
       16

LINQ Условная группа

15 голосов
/ 16 апреля 2009

Можно ли написать оператор 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.

Ответы [ 2 ]

24 голосов
/ 16 апреля 2009

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

bool someFlag = false;
var result = from t in tableName
   group t by new { FieldA = (someFlag ? 0 : t.FieldA), t.FieldB } into g
   select g;
0 голосов
/ 16 апреля 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;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...