C# LINQ到实体的日期时间不一致
我有以下C#代码,它创建了一个C# LINQ到实体的日期时间不一致,c#,.net,linq,datetime,linq-to-entities,C#,.net,Linq,Datetime,Linq To Entities,我有以下C#代码,它创建了一个DateTime,将其输入到一个表中,然后查询该表: DateTime date = DateTime.Now; DateTest newRecord = new DateTest { dateColumn = date }; db.DateTest.AddObject(newRecord); db.SaveChanges(); IQueryable<DateTest> records = from d in db.DateTest
DateTime
,将其输入到一个表中,然后查询该表:
DateTime date = DateTime.Now;
DateTest newRecord = new DateTest {
dateColumn = date
};
db.DateTest.AddObject(newRecord);
db.SaveChanges();
IQueryable<DateTest> records =
from d in db.DateTest
select d;
对于从表中检索到的记录,我得到:
Date {11/22/2011 12:00:00 AM} System.DateTime
Day 22 int
DayOfWeek Tuesday System.DayOfWeek
DayOfYear 326 int
Hour 8 int
Kind Unspecified System.DateTimeKind
Millisecond 347 int
Minute 59 int
Month 11 int
Second 33 int
Ticks 634575491733470000 long
TimeOfDay {08:59:33.3470000} System.TimeSpan
Year 2011 int
正如你所看到的,它们会消失几毫秒
有人能解释一下为什么会这样,以及我如何修复它吗?我需要能够查询与内存中的
DateTime
对象完全匹配的记录,但这种行为导致我的查询空手而归。我认为这是因为您在数据库中使用了DateTime
列。它与.NET中的DateTime
类型的精度不同。请尝试在数据库中改用列类型DateTime 2
。SQL Server中的DateTime
字段的分辨率与DateTime
.NET类的分辨率不同
从MSDN-:
精度:四舍五入到.000、.003或.007秒的增量
因此,在您的例子中,毫秒被四舍五入到.007
,得到.3470000
,而不是.3450602
SQL Server数据类型的分辨率为100纳秒,与.NET类似,因此可能是合适的替代品。谢谢,DateTime2解决了这个问题。我使用了DateTime2(7)的精度-这是否可靠地等同于.NET DateTime?@Eric是的,(顺便说一句,默认值是7),那么两者的精度都是100纳秒。
Date {11/22/2011 12:00:00 AM} System.DateTime
Day 22 int
DayOfWeek Tuesday System.DayOfWeek
DayOfYear 326 int
Hour 8 int
Kind Unspecified System.DateTimeKind
Millisecond 347 int
Minute 59 int
Month 11 int
Second 33 int
Ticks 634575491733470000 long
TimeOfDay {08:59:33.3470000} System.TimeSpan
Year 2011 int