Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#从linq开始,日期时间缩短到分钟_C#_Linq_Datetime - Fatal编程技术网

C#从linq开始,日期时间缩短到分钟

C#从linq开始,日期时间缩短到分钟,c#,linq,datetime,C#,Linq,Datetime,我正在尝试比较两个DateTimes和一个SQL条目。我发现问题在于,由于从DB返回的类型,滴答声稍微变小了。但是我想不出一个解决办法 这是我要抓取的DateTime DateTime toGrab = DateTime.Now.AddMinutes(10) .AddSeconds(-DateTime.Now.Second) .AddMilliseconds(-Dat

我正在尝试比较两个
DateTimes
和一个SQL条目。我发现问题在于,由于从DB返回的类型,滴答声稍微变小了。但是我想不出一个解决办法

这是我要抓取的
DateTime

DateTime toGrab = DateTime.Now.AddMinutes(10)
                              .AddSeconds(-DateTime.Now.Second)     
                              .AddMilliseconds(-DateTime.Now.Millisecond);
这是我的linq表情

cc.DBAppointments.Where(c => c.StartDate == toGrab && c.Approved == 1).ToList();
有什么建议吗?

更改

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

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

编辑


此外,在您的数据库中,值
2015-12-10 10:33:48.373
2015-12-10 10:33:48.374
不同,即使它们相隔1毫秒。如果您想获得更广泛的范围,可以执行
c.StartDate>=StartDate&&c.StartDate您正在对
DateTime.Now
进行多次引用,每次都可能有不同的值。以下措施应能更好地发挥作用:

var now = DateTime.Now;
var toGrab = now.Date.AddHours(now.Hour).AddMinutes(now.Minute + 10);
请注意,为了获得一个清晰的“分钟顶端”,向日期添加小时和分钟比删除秒和毫秒效果更好,因为
DateTime
中的细节比毫秒更多。

您可以创建对象,这意味着您可以这样做:

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

我假设您使用的是
实体框架
。 如果您只需要比较datetime直到分钟,那么可以使用
System.Data.Entity.DbFunctions
访问linq to entities中的规范函数。 您可以使用以下示例:

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

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

您正在调用的
DateTime。现在
多次,这可能会给您带来不同的结果。请注意,这仍然不会给您一个清晰的“分钟顶部”,因为
DateTime
中的细节超过了一毫秒。这比看上去更纯粹,因为EF将
DateTime转换为t-SQL函数
SysDateTime()
,所以比较与数据库执行查询的时间完全匹配。理论上,当客户机的
DateTime
变量最终得到评估时,它可能需要几秒钟的时间。更不用说客户机和服务器时钟之间的差异了(理论上说不上)。这是我总是忘记dbfunctions的诀窍,只是对资源进行了一个小的修改,即System.Data.Entity。
cc.DBAppointments.Where(c =>
    DateTime.Now.AddMinutes(10).Subtract(c.StartDate).Duration() < oneMinute &&
    c.Approved == 1).ToList();
cc.DBAppointments
  .Where(c => DbFunctions.DiffMinutes(c.StartDate,DateTime.Now) == 0 && c.Approved == 1)
  .ToList();