按名称和日期排序,每组按日期排序
本文关键字:排序 日期 | 更新日期: 2023-09-27 18:13:35
我有以下表格:
名日期
10/04/2016
10/03/2016
10/05/2016
B 10/02/2016
B 10/01/2016
B 10/03/2016
C 10/05/2016
C 10/02/2016
C 10/04/2016
我想显示这个
名日期
B 10/01/2016
B 10/02/2016
B 10/03/2016
C 10/02/2016
C 10/04/2016
C 10/05/2016
10/03/2016
10/04/2016
A 10/05/2016
如何创建查询以获得此结果。
var elements = new[]
{
new { Name = "A", Date = DateTime.Parse("10/04/2016") },
new { Name = "A", Date = DateTime.Parse("10/03/2016") },
new { Name = "A", Date = DateTime.Parse("10/05/2016") },
new { Name = "B", Date = DateTime.Parse("10/02/2016") },
new { Name = "B", Date = DateTime.Parse("10/01/2016") },
new { Name = "B", Date = DateTime.Parse("10/03/2016") },
new { Name = "C", Date = DateTime.Parse("10/05/2016") },
new { Name = "C", Date = DateTime.Parse("10/02/2016") },
new { Name = "C", Date = DateTime.Parse("10/04/2016") },
};
// LINQ to Objects
elements
.GroupBy(e => e.Name) // grouping by name
.Select(group => group.OrderBy(e => e.Date)) // order elements by date
.OrderBy(group => group.First().Date) // order groups by date
.SelectMany(group => group); // compose groups
// LINQ to Entities
elements
.GroupBy(e => e.Name)
.Select(group => group.OrderBy(e => e.Date))
.OrderBy(group => group.FirstOrDefault().Date)
.AsEnumerable()
.SelectMany(group => group);
您可能不需要groupby,但只有orderby才能完成您的任务:
yourList.OrderBy(l => l.Date).ThenBy(l => l.Name)
如果您能提供更多信息就太好了。例如,包含数据的对象类型。它是自定义模型还是DataTable?无论如何,我都要试一试。
var result = dataTable.Rows.AsEnumerable().GroupBy(x => x.Name).OrderBy(x => x.Date);
或
var result = Foo.GroupBy(x => x.Name).OrderBy(x => x.Date);
https://dotnetfiddle.net/0SfhAz
这是对代码的摆弄。由于某些原因,我无法让小提琴写出列表中的值。
我最初是在LinqPad中这样做的,下面是我在LinqPad
中从小提琴中的代码中得到的输出- b 10/1/2016
- b 10/2/2016
- b 10/3/2016
- c 10/2/2016
- c 2016/10/4
- c 10/5/2016
- a 2016年3月10日 2016年4月10日2016/10/5
我不知道为什么我不能在。net小提琴上做一个writeline,但这很困难。如果提琴不能为您工作,这里是我使用的linq查询
var orderedList = originalList。order (x => x. somedate)。GroupBy(y => y. name);
可能有更好的方法,但这看起来解决了你的问题