我有一个带有DateTimeOffset属性的类:
public class Sample
{
public DateTimeOffset expires { get; set; }
}
最终会形成它们的集合:
IEnumerable<Sample> collection;
2个问题:
创建一个方法,返回集合中所有在当前时间之后且仍然是今天(即午夜之前)过期的样品项的最佳方法是什么?
返回集合中所有在接下来的24小时内到期的样品项的最佳方法是什么?
我有一个带有DateTimeOffset属性的类:
public class Sample
{
public DateTimeOffset expires { get; set; }
}
IEnumerable<Sample> collection;
2个问题:
创建一个方法,返回集合中所有在当前时间之后且仍然是今天(即午夜之前)过期的样品项的最佳方法是什么?
返回集合中所有在接下来的24小时内到期的样品项的最佳方法是什么?
// greater than now, still today
collection.Where(d => d.expires.DateTime > DateTime.Now && d.expires.Date == DateTime.Today);
// expires in the next 24 hours
collection.Where(d => d.expires.DateTime > DateTime.Now && d.expires.DateTime < DateTime.Now.AddHours(24));
var list1 =
collection.Where
(c => c.expires.DateTime > DateTime.Now &&
c.expires.DateTime < DateTime.Today.AddDays(1));
var list2 =
collection.Where
(c => c.expires.DateTime >= DateTime.Now &&
c.expires.DateTime <= DateTime.Now.AddHours(24));
将计算出的值进行“缓存”以提高性能是一个好的实践,否则它将在每个循环中重新计算(就像循环内部一样):
DateTime tomorrow = DateTime.Today.AddDays(1);
DateTime now = DateTime.Now;
DateTime next24hrs = now.AddHours(24);
IEnumerable<Sample> next24HoursSamples = collection.Where(sample=>sample.expires>now && sample.expires<next24hrs).ToList();
IEnumerable<Sample> sameDaySamples = next24HoursSamples.Where(sample=>sample.expires>=now && sample.expires<tomorrow).ToList();