我正在使用 C# 中的对象列表,每个对象都包含一个 DateTime 属性,我需要知道n个对象是否在一小时内发生。
我必须比较每个对象吗?有更快的方法吗?我不知道,这可以用Linq完成吗?
你可以使用Where
+ Count
:
// for example today between 12 and 13 o'clock
DateTime startHour = DateTime.ToDay.AddHours(12)
DateTime endHour = startHour.AddHours(1);
var inHour = collection.Where(o => o.DateTimeProperty >= startHour
&& o.DateTimeProperty <= endHour);
int count = inHour.Count();
当然这和一个简单的循环是一样的。但这是你必须走的路。
你也可以使用GroupBy
,但我不明白你为什么需要它。
var hourGroup = collection
.GroupBy(o => o.DateTimeProperty.AddMinutes((-1) * o.DateTimeProperty.Minute))
.FirstOrDefault(g => g.Key == startHour);
if(hourGroup != null)
{
int count = hourGroup.Count();
}