我有过

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

但它将DateTime的时间部分包括在内进行了比较.我真的不需要它.

How to do it without time?

非常感谢.

推荐答案

只需使用Date属性:

var today = DateTime.Today;

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

请注意,我已经显式地计算了DateTime.Todayonce,因此查询是一致的-否则,每次执行查询时,甚至within执行时,Today都可能发生变化,因此您会得到不一致的结果.例如,假设您有以下数据:

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

当然,结果中应该有both个条目1和3,或者应该有neither个条目.但是,如果在执行前两次判断后判断DateTime.Todaychanges,直到3月9日,您可能会得到条目1、2、4.

当然,使用DateTime.Today假设你对local时区的日期感兴趣.这可能不合适,你应该确保你知道自己的意思.例如,你想用DateTime.UtcNow.Date来代替.不幸的是,DateTime is a slippery beast...

编辑:您可能还希望完全摆脱对DateTime个静态属性的调用——它们使代码难以进行单元测试.在Noda Time中,我们有一个专门用于此目的的接口(IClock),我们希望适当地注入该接口.有一个用于生产的"系统时间"实现和一个用于测试的"存根"实现,或者您可以自己实现.

当然,不用野田佳彦,你也可以使用同样的 idea .要对这段特定的代码进行单元测试,您可能希望传递日期,但您将从somewhere获得它——注入时钟意味着您可以测试all段代码.

.net相关问答推荐

Powershell机器令牌组

无法在Ubuntu 22.04.3上运行带有Rider 2023和DotNet-8.0的项目

是否有内置方法将 nuget 包引用为 csproj 中的文件?

在 C# 中输入按键

每 X 秒执行一次指定函数

Int32.ToString() 是特定于文化的吗?

我应该默认推荐密封类吗?

生产代码中的 System.Diagnostics.Debug.WriteLine

Automapper:使用 ReverseMap() 和 ForMember() 进行双向映射

在 Moq Callback() 调用中设置变量值

如何在 C# 中将 HTML 转换为文本?

向 .NET 应用程序添加脚本功能

当我们按下 Enter 键时启动的 WPF 文本框命令

如何在 WebBrowser 控件中注入 Javascript?

如何在 C# 中以编程方式安装 Windows 服务?

是否可以在 XP 上运行 .NET 4.5 应用程序?

String.Join 与 StringBuilder:哪个更快?

内存分配:堆栈与堆?

在 Windows 窗体 C# 应用程序中拥有配置文件的最简单方法

MultipleActiveResultSets=True 还是多个连接?