【发布时间】:2015-10-22 16:45:59
【问题描述】:
我有一张这样的桌子:
variety category quantity
----------------------------------------------
rg pm 10
gs pm 5
rg com 8
我想根据这些bool参数制作一个GroupBy:
IncludeVarietyIncludeCategory
例如:
IncludeVariety = true;
IncludeCategory = true;
会返回这个:
variety category quantity
----------------------------------------------
rg pm 10
gs pm 5
rg com 8
还有这个:
IncludeVariety = true;
IncludeCategory = false;
会返回这个:
variety category quantity
----------------------------------------------
rg - 18
gs - 5
还有这个:
IncludeVariety = false;
IncludeCategory = true;
会返回这个:
variety category quantity
----------------------------------------------
- pm 15
- com 8
你懂的……
问题:如何使用 LINQ 实现这一目标?
重要提示:我已将问题简化为 两个布尔变量(IncludeVariety 和 IncludeCategory),但实际上我会有更多列 (说五个)
我不知道如何动态生成查询(.GroupBy 和 .Select):
rows.GroupBy(r => new { r.Variety, r.Category })
.Select(g => new
{
Variety = g.Key.Variety,
Category = g.Key.Category,
Quantity = g.Sum(a => a.Quantity),
});
rows.GroupBy(r => new { r.Category })
.Select(g => new
{
Variety = new {},
Category = g.Key.Category,
Quantity = g.Sum(a => a.Quantity),
});
rows.GroupBy(r => new { r.Variety })
.Select(g => new
{
Variety = g.Key.Variety,
Category = new {},
Quantity = g.Sum(a => a.Quantity),
});
我过去做过的类似的事情是连接Where,比如:
var query = ...
if (foo) {
query = query.Where(...)
}
if (bar) {
query = query.Where(...)
}
var result = query.Select(...)
我可以在这里做类似的事情吗?
【问题讨论】: