我有一个具有DateTimeOffset属性的类:
public class Sample
{
public DateTimeOffset expires { get; set; }
}
并最终收集了它们:
IEnumerable<Sample> collection;
2个问题:
创建一个方法的最佳方法是什么,该方法从集合中返回所有Sample项目,其中expires大于现在且仍然是今天(即午夜之前)?
在过去24小时内过期的所有样品中退回所有样品的最佳方法是什么?
答案 0 :(得分:3)
// 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));
答案 1 :(得分:0)
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));
答案 2 :(得分:-1)
这是一个很好的做法,“缓存”计算的性能值,否则它将在每个循环中计算(如内部循环):
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();
请注意,从已过滤的列表中检索sameDay列表(同一天是接下来24小时的子集),因此可以过滤的项目较少。
编辑:我更新了代码以使用即时查询执行模型,因为@danijels警告延迟执行。