LINQ DateTimeOffset与今天比较

时间:2010-10-12 21:33:21

标签: c# linq linq-to-sql

我有一个具有DateTimeOffset属性的类:

public class Sample 
{
    public DateTimeOffset expires { get; set; }
}

并最终收集了它们:

IEnumerable<Sample> collection;

2个问题:

  1. 创建一个方法的最佳方法是什么,该方法从集合中返回所有Sample项目,其中expires大于现在且仍然是今天(即午夜之前)?

  2. 在过去24小时内过期的所有样品中退回所有样品的最佳方法是什么?

3 个答案:

答案 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警告延迟执行。