LINQ条件组

时间:2009-04-16 16:00:58

标签: linq grouping

是否可以使用条件组子句编写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分组。

2 个答案:

答案 0 :(得分:24)

同事为我解决了这个问题:

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)

如果您的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;

......或者我在这里遗漏了什么?