C#entity datetime返回日期,但时间始终为00:00:00

时间:2012-03-01 19:31:59

标签: c# sql datetime entity-framework-4

当我查看我的数据库时,Connections表的Date字段(类型为DateTime)的值为2012-03-01 01:49:02.097。

但是当我想检查用户是否在过去一小时内连接时:

if (user.Connections.Max(t => t.Date).Date.AddHours(1) > DateTime.Now)

日期的时间部分始终为零。

所以我的代码只能在午夜到凌晨1小时之间工作哈哈!

感谢您的帮助!

1 个答案:

答案 0 :(得分:6)

.Date有两个含义,这会造成一些混乱;这里:

t => t.Date

这意味着“访问名为Date的成员,DateTime”;所以这里:

.Max(t => t.Date)

这意味着“找到所有Date成员的最大值,DateTime

然而!这样:

).Date.A
 ^^^^^

表示“获取此值的仅日期部分”(任何DateTime都有.Date成员,该成员是该值的仅日期部分);所以是的:那是午夜,然后你加一个小时。所以;不要那样做!你想要的可能是:

if (user.Connections.Max(t => t.Date).AddHours(1) > DateTime.Now)

或者更有效率:

var cutoff = DateTime.Now.AddHours(-1);
if (user.Connections.Any(t => t.Date > cutoff)) {
    ...
}

可以短路的正弦。