C# DateTime 从 linq 下降到分钟

本文关键字:分钟 linq DateTime | 更新日期: 2023-09-27 18:31:57

我正在尝试比较DateTime.Now和SQL条目中的两个DateTimes。我看到的问题是由于从数据库返回的那种,刻度略有偏差。但是我无法找到解决方法。

这是我要抓住DateTime

DateTime toGrab = DateTime.Now.AddMinutes(10)
                              .AddSeconds(-DateTime.Now.Second)     
                              .AddMilliseconds(-DateTime.Now.Millisecond);

还有我的林克表达式。

cc.DBAppointments.Where(c => c.StartDate == toGrab && c.Approved == 1).ToList();

有什么建议吗?

C# DateTime 从 linq 下降到分钟

我假设你为此使用Entity Framework。如果只需要比较到几分钟的日期时间,则可以使用 System.Data.Entity.DbFunctions 访问 linq-to-entity 中的规范函数。例如,您可以使用此功能:

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

这样,您就可以访问高级sql日期时间比较,而不必做向DateTime.Now添加秒/毫秒的技巧。此函数将忽略小于分钟的所有内容

您正在对 DateTime.Now 进行多次引用,每次可能具有不同的值。以下应该效果更好:

var now = DateTime.Now;
var toGrab = now.Date.AddHours(now.Hour).AddMinutes(now.Minute + 10);

请注意,为了获得清晰的"分钟顶部",在日期中添加小时和分钟比尝试删除秒和毫秒更好,因为DateTime中的细节比毫秒更多。

更改

DateTime toGrab = DateTime.Now.AddMinutes(10)
                              .AddSeconds(-DateTime.Now.Second)
                              .AddMilliseconds(-DateTime.Now.Millisecond);

DateTime now = DateTime.Now;
DateTime toGrab = now.AddMinutes(10)
                     .AddSeconds(-now.Second)
                     .AddMilliseconds(-now.Millisecond);

另一方面,有什么理由需要将约会时间缩短到精确的毫秒吗? 似乎很容易丢失记录?

编辑

此外,在数据库中,值2015-12-10 10:33:48.3732015-12-10 10:33:48.374不同,即使它们相隔 1 毫秒。 如果你想获得更广泛的范围,你可以做c.StartDate >= startDate && c.StartDate <= endDate && c.Approved == 1

您可以在TimeSpan对象上进行比较,这意味着您可以这样做:

TimeSpan oneMinute = new TimeSpan(0, 1, 0);
cc.DBAppointments.Where(c =>
    DateTime.Now.AddMinutes(10).Subtract(c.StartDate) < oneMinute &&
    c.Approved == 1).ToList();

当然,如果将来c.StartDate小于 9 分钟,减法将得到 <-1 分钟的结果。 我不确定您的目标是否在 1 分钟内。 如果是这种情况,您可以将.Duration()添加到公式中,这将返回 TimeSpan 的绝对值:

cc.DBAppointments.Where(c =>
    DateTime.Now.AddMinutes(10).Subtract(c.StartDate).Duration() < oneMinute &&
    c.Approved == 1).ToList();