从列表中获取出现次数最多的最早日期

时间:2018-07-20 17:56:57

标签: c# list linq

我有一个包含日期的列表,并且同一日期可以重复多次。

List<DateTime> dates = new List<DateTime>();

foreach (List<string> l in reservations)
{
    var start = Convert.ToDateTime(l.First());
    var end   = Convert.ToDateTime(l.Last());

    for (var date = start.Date; date.Date <= end.Date; date = date.AddDays(1))
        dates.Add(date);
}

我想找到出现次数最多的日期。如果有多个发生次数最多的日期,我需要最早的日期。这是我编写的LINQ查询:

DateTime max = dates.GroupBy(s => s)
                        .OrderByDescending(s => s.Count())
                        .ThenBy(s => s)
                        .First().Key;

这是我遇到的错误:

  

至少一个对象必须实现IComparable。'

我该怎么做?

3 个答案:

答案 0 :(得分:2)

@Servy是正确的。

我建议:

DateTime max = dates.GroupBy(s => s)
                    .OrderByDescending(sg => sg.Count())
                    .ThenBy(sg => sg.Key)
                    .First().Key;

答案 1 :(得分:1)

您要按日期的订购。不能将整个日期组与另一个日期组进行比较(除非您提供自定义比较器)。

您可能想按组的键(这是一个日期)而不是整个组的顺序进行订购。

答案 2 :(得分:0)

您可以尝试使用此linq,然后按Groupby,然后选择DateTimeCntNumber,然后按Datetime desc排序

var result = dates.GroupBy(s => s)
                    .Select(x=>new { Dt=x.Key,Cnt=x.Count()})
                    .OrderByDescending(o => o.Cnt)
                    .ThenBy(z=>z.Dt)
                    .First().Dt;