我有下表。
姓名日期
2016年4月10日
2016年10月10日
2016年5月10日
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
2016年10月10日
2016年4月10日
2016年10月10日
如何创建查询以获得此结果。
答案 0 :(得分:1)
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);
答案 1 :(得分:0)
您可能不需要groupby,但只有orderby可以完成您的任务:
yourList.OrderBy(l => l.Date).ThenBy(l => l.Name)
答案 2 :(得分:0)
如果您提供更多信息,那就太棒了。例如,包含数据的对象类型。它是自定义模型还是DataTable?如何,我会尝试两者。
var result = dataTable.Rows.AsEnumerable().GroupBy(x => x.Name).OrderBy(x => x.Date);
OR
var result = Foo.GroupBy(x => x.Name).OrderBy(x => x.Date);
答案 3 :(得分:0)
https://dotnetfiddle.net/0SfhAz
这是代码的小提琴。出于某种原因,我无法在小册子中写出值。
我最初在LinqPad中做过这个,这是我在LinqPad中从小提琴代码中得到的输出
我不知道为什么我不能在.net小提琴上做一个写作线,但这很难。如果小提琴不适合你,这里是我用于此
的linq查询var orderedList = originalList.OrderBy(x => x.SomeDate).GroupBy(y => y.Name);
可能有更好的方法,但这看起来可以解决您的问题