按名称和按日期排序,每个组按日期在linq中排序

时间:2016-10-19 03:58:32

标签: c# .net

我有下表。
姓名日期
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日

如何创建查询以获得此结果。

4 个答案:

答案 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中从小提琴代码中得到的输出

  1. B 10/1/2016
  2. B 10/2/2016
  3. B 10/3/2016
  4. C 10/2/2016
  5. C 10/4/2016
  6. C 10/5/2016
  7. 2016年10月3日
  8. 2016年10月4日
  9. 2016年10月5日
  10. 我不知道为什么我不能在.net小提琴上做一个写作线,但这很难。如果小提琴不适合你,这里是我用于此

    的linq查询

    var orderedList = originalList.OrderBy(x => x.SomeDate).GroupBy(y => y.Name);

    可能有更好的方法,但这看起来可以解决您的问题