public class Schedule
{
.....
public DateTime? StartDate{get;set;}
public DateTime? EndDate{get;set;}
....
}
我想使用 linq 或 lambda 以最佳方式从IEnumerable列表中获取已启动的Schedule对象列表。
注意:空白日期值表示此处为无穷大。但是,未指定的计划期间(空的开始和结束日期)表示计划未开始..
答案 0 :(得分:0)
bool IsStarted(Schedule schedule) {
// Assuming that ended schedules should be excluded
return schedule.StartDate != null && schedule.StartDate > DateTime.Now
&& (schedule.EndDate==null || schedule.EndDate < Datetime.Now);
}
items.Where(IsStarted);
如果可能,将IsStarted作为Schedule类的属性并不是最糟糕的想法。在这种情况下,您将不得不使用:
items.Where(i => i.IsStarted);
答案 1 :(得分:0)
var started =
from s in schedules
let startDate = s.StartDate ?? DateTime.MaxValue
let endDate = s.EndDate ?? DateTime.MinValue
where startDate <= DateTime.Now
&& endDate > DateTime.Now
select s;
答案 2 :(得分:0)
schedules.Where(s => s.StartDate < DateTime.Now
|| (s.StartDate == null && s.EndDate != null));
这假设您实际上想要您所说的内容 - 所有已开始的时间表,包括那些已经结束的时间表。
此外,您可能希望更改表示未指定的计划期间的方式,可能需要为此添加bool
。如果null
表示无穷大,则应始终表示无穷大。