c# – 如何比较DateTime没有时间通过​​LINQ?

我有

var q = db.Games.Where(t => t.StartDate >= DateTime.Now).OrderBy(d => d.StartDate);

但它比较包括DateTime的时间部分。我真的不需要它。

如何做没有时间?

谢谢!

只需使用Date属性:

var today = DateTime.Today;

var q = db.Games.Where(t => t.StartDate.Date >= today)
                .OrderBy(t => t.StartDate);

注意,我已经显式评估了DateTime.Today一次,所以查询是一致的 – 否则每次查询执行,甚至在执行,今天可能会改变,所以你会得到不一致的结果。例如,假设您有以下数据:

Entry 1: March 8th, 8am
Entry 2: March 10th, 10pm
Entry 3: March 8th, 5am
Entry 4: March 9th, 8pm

当然,条目1和3都应该在结果中,或者两者都不应该…但是如果你评估DateTime.Today并且它在执行前两个检查后更改为3月9日,则可以结束条目1, 2,4。

当然,使用DateTime.Today假设你对当地时区的日期感兴趣。这可能不合适,你应该确保你知道你的意思。例如,您可能希望使用DateTime.UtcNow.Date。不幸的是,DateTime is a slippery beast

编辑:你可能还想摆脱对DateTime静态属性的调用 – 他们使代码难以单元测试。在Noda Time,我们有一个专门为此目的的接口(IClock),我们期望适当地注入。有一个“系统时间”实现生产和一个“存根”实施测试,或者你可以自己实现。

当然,你可以使用相同的想法,而不使用Noda时间。要单元测试这个特定的代码片段,你可能想传递的日期,但你会得到它从某个地方 – 注入一个时钟意味着你可以测试所有的代码。

http://stackoverflow.com/questions/9626348/how-to-compare-datetime-without-time-via-linq

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c# – 如何比较DateTime没有时间通过​​LINQ?