C# 在另一列Linq查询中按年份分组、按月份排序和总计
如果这个Linq查询几乎正常工作,就无法理解如何执行降序。以下是我到目前为止的情况:C# 在另一列Linq查询中按年份分组、按月份排序和总计,c#,sql,linq,C#,Sql,Linq,如果这个Linq查询几乎正常工作,就无法理解如何执行降序。以下是我到目前为止的情况: list.GroupBy(grp => grp.year) .SelectMany(g => g.OrderBy(grp => grp.month)) .ToList(); 这将产生以下结果: 月份的顺序正确,但年份需要按降序排列。像这样: 这可能要求太多,但也需要每年总共运行几天。非常感谢您的帮助 数据如下所示: list.GroupBy(grp => grp.y
list.GroupBy(grp => grp.year)
.SelectMany(g => g.OrderBy(grp => grp.month))
.ToList();
这将产生以下结果:
月份的顺序正确,但年份需要按降序排列。像这样:
这可能要求太多,但也需要每年总共运行几天。非常感谢您的帮助
数据如下所示:
list.GroupBy(grp => grp.year)
.SelectMany(g => g.OrderBy(grp => grp.month).ThenByDescending(grp => grp.year))
.ToList();
我的答案是:
list.OrderByDescending(grp => grp.year).ThenBy(grp => grp.month).ToList()
您需要在您的
OrderBy
表达式之后添加。然后按降序(grp=>grp.year)
,如下所示:
list.GroupBy(grp => grp.year)
.SelectMany(g => g.OrderBy(grp => grp.month).ThenByDescending(grp => grp.year))
.ToList();
要实现您想要的目标,首先,按年度订购,然后按月份订购 见下面的代码:
list.OrderByDescending(grp => grp.year).ThenBy(grp => grp.month)
.GroupBy(grp => grp.year)
.SelectMany(g => g)
.ToList();
如果要获得每个分组年的总天数,可以这样做:
list.OrderByDescending(grp => grp.Year).ThenBy(grp => grp.Month)
.GroupBy(grp => grp.Year)
.Select(g => new { Year = g.Key, Months = g, TotalDays = g.Sum(d => DateTime.DaysInMonth(d.Year, d.Month)) })
.ToList();
因此,您将拥有一个具有3个属性的对象集合
SelectMany
(选择多个)(选择多个)(选择多个)>来改变和取消分组,这实际上会丢弃任何分组;它只是将数据分组,而不是按任何可配置的顺序。只需一次选择所有数据,按年份递减排序,然后按月份排序:
list.OrderByDescending(l => l.year)
.ThenBy(l => l.month));
将
。然后按降序(grp=>grp.year)
添加到初始的order by之后。是否有OrderByDescending
?您可以使用自动完成功能查看可用的LINQ方法。他希望先按月排序,然后按年排序。您能否提供有关初始列表中数据的信息?列表中的项目类型是什么?然后似乎忽略了ByDeceding(grp=>grp.Year)这是一个小的格式更改;现在的代码应该可以。我知道上次你有双点,但我看到了。然而,BYDESCOING部分仍被忽略。从1980年、1981年、1982年等开始的年份,应该是1982年、1981年、1980年等。还有一个括号放错了位置,因此排序应用于SelectMany
的结果,而不是OrderBy
的结果。排序现在是正确的,仍然适用于总数。1。谢谢你,它的作品完美,简单的代码。2.是的,我将在前端进行计数。