C#DateTime从linq到分钟

Ser*_*One 8 c# linq datetime

我试图DateTimes在一分钟DateTime.Now和一个SQL条目中比较两个分钟.我发现问题是由于从DB返回的类型,滴答声略有偏差.但是我无法找到解决方法.

这是我DateTime抓住的

DateTime toGrab = DateTime.Now.AddMinutes(10)
                              .AddSeconds(-DateTime.Now.Second)     
                              .AddMilliseconds(-DateTime.Now.Millisecond);
Run Code Online (Sandbox Code Playgroud)

还有我的linq表达.

cc.DBAppointments.Where(c => c.StartDate == toGrab && c.Approved == 1).ToList();
Run Code Online (Sandbox Code Playgroud)

有什么建议吗?

Ale*_*rck 7

我打算假设你正在使用Entity Framework它.如果您只需要比较日期时间直至分钟,您可以使用System.Data.Entity.DbFunctions访问linq-to-entities中的规范函数.您可以使用此示例:

cc.DBAppointments
  .Where(c => DbFunctions.DiffMinutes(c.StartDate,DateTime.Now) == 0 && c.Approved == 1)
  .ToList();
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以访问高级sql日期时间比较,并且您无需为您的操作添加秒/毫秒DateTime.Now.此功能将忽略小于分钟的所有内容.

  • 这比看起来更纯粹,因为EF将`DateTime.Now`转换为t-SQL的函数`SysDateTime()`,因此比较与数据库执行查询的时间完全匹配.从理论上讲,客户端的"DateTime"变量在最终得到评估时可能会被关闭.更不用说(不是那么理论上)客户端和服务器时钟之间的差异. (2认同)