LINQ条件分组

16

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


FieldA和FieldB是相同类型的吗?如果是,那将大大简化事情。 - Noldorin
另外,我假设someFlag取决于当前元素? - Noldorin
是的,FieldA和FieldB都是整数。而someFlag将作为参数传递给该方法。 - MrDustpan
2个回答

31

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

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

3
可以在 "}" 后面省略所有内容。您不需要明确选择分组的项目。 - Bryan Watts

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接