LINQ to Entities DateTime不一致

时间:2011-11-22 17:16:37

标签: 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
    select d;

如果我此时破解代码,并查看调试器中的对象,我会得到date对象:

Date    {11/22/2011 12:00:00 AM}    System.DateTime
Day 22  int
DayOfWeek   Tuesday System.DayOfWeek
DayOfYear   326 int
Hour    8   int
Kind    Local   System.DateTimeKind
Millisecond 345 int
Minute  59  int
Month   11  int
Second  33  int
Ticks   634575491733450602  long
TimeOfDay   {08:59:33.3450602}  System.TimeSpan
Year    2011    int

我从表中检索到的记录中得到了这个:

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对象完全匹配的记录,但是这种行为导致我的查询空出来。

2 个答案:

答案 0 :(得分:8)

SQL Server中DateTime字段的分辨率与DateTime .NET类的分辨率不同。

来自MSDN - datetime (Transact-SQL)

  

准确度:舍入为.000,.003或.007秒的增量

因此,在您的情况下,毫秒会向上舍入到.007,而.3470000代替.3450602

DateTime2 SQL Server数据类型的分辨率为100纳秒,如.NET,因此可能是合适的替代品。

答案 1 :(得分:5)

我认为这是因为您在数据库中使用了DateTime列。它与.NET中的DateTime类型的精度不同。请尝试在数据库中使用列类型DateTime2