我有一个包含日期的列表,并且同一日期可以重复多次。
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。'
我该怎么做?
答案 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,然后选择DateTime
和CntNumber
,然后按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;