我有以下代码:
public string startTime = "0900";
public string closeTime = "1730";
public class TimesInfo
{
public string Code { get; set; }
public DateTime startTime { get; set; }
public DateTime closeTime { get; set; }
}
示例数据:
List<TimesInfo> list = new List<TimesInfo>();
list.Add(new TimesInfo { EmpCode = "101", startTime=”2011-04-28 10:00”, closeTime=”2011-04-28 12:00” });
list.Add(new TimesInfo { EmpCode = "102", startTime=”2011-04-28 09:00”, closeTime=”2011-04-28 17:00” });
list.Add(new TimesInfo { EmpCode = "103", startTime=”2011-04-28 10:00”, closeTime=”2011-04-28 18:00” });
list.Add(new TimesInfo { EmpCode = "104", startTime=”2011-04-28 11:00”, closeTime=”2011-04-28 16:00” });
我希望在List<TimesInfo>
和startTime
之间找到closeTime
。
因此,从上面的列表中我们应该能够检索除代码103之外的所有员工,因为18:00晚于17:00。
答案 0 :(得分:0)
您应首先将字符串解析为TimeSpan
TimeSpan start = TimeSpan.ParseExact(startTime, "hhmm", CultureInfo.InvariantCulture);
TimeSpan close = TimeSpan.ParseExact(closeTime, "hhmm", CultureInfo.InvariantCulture);
然后你可以使用这个LINQ查询:
List<TimesInfo> inRange = list
.Where(ti => ti.startTime.TimeOfDay >= start && ti.closeTime.TimeOfDay <= close)
.ToList();
答案 1 :(得分:0)
最干净的方法是使startTime
和closeTime
(变量,而不是类成员)TimeSpan
个对象。然后,您可以将它们与DateTime成员的TimeOfDay
进行比较:
list.Where(ti => ti.startTime.TimeOfDay >= startTime &&
ti.closeTime.TimeOfDay <= closeTime)