LINQ 分组依据;如何使其灵活

LINQ Group by; How to make it flexible

考虑到底部的代码,这是我的问题:

我希望能够根据输入对收入进行分组,例如: - 年 - 月 - 星期 - 单位 等等

我是否需要为每个组合制作一个 var(并相应地更改分组依据),或者我可以制作一些灵活的分组依据变量。这意味着我可以获得 input 级别的 LocationRevenue 例如:周、月或年;或年+月一起,周+月一起或任何其他组合。

var locationRevenues = revenues
.GroupBy(g => new { Location = g.Location, Month = DateTimeHelper.GetMonth(g.Date)})
.Select(r => new
{
    Location = r.Key,
    RevenueTotal = r.Sum(i => i.RevenueAmount),

})
.ToList();

每次在 groupby 子句中添加新的 groupBy select 并按 Ctrl + R + M 并生成新方法。您可以将其作为参数传递。

Do(Func<TSource, TKey>)

var locationRevenues = revenues
                .GroupBy(Func())
                .Select(r => new
                {
                    Location = r.Key,
                    RevenueTotal = r.Sum(i => i.RevenueAmount),

                })
                .ToList();


private static Func<Revenues, object> Func()
{
    return g => new { Location = g.Location, Month = 9 };
}