C# LINQ到实体的日期时间不一致

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

我有以下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
    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