LINQ to Entities DateTime不一致

Eri*_*ric 3 .net c# 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;
Run Code Online (Sandbox Code Playgroud)

如果我此时破坏了代码,并查看调试器中的对象,我得到了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
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,它们会在几毫秒内完成.

任何人都可以解释为什么这样,以及我如何解决它?我需要能够查询与DateTime内存中的对象完全匹配的记录,但是这种行为导致我的查询空手而归.

Ode*_*ded 8

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

从MSDN - datetime(Transact-SQL):

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

所以,在你的情况下,毫秒被舍入到.007,.3470000而不是.3450602.

DateTime2SQL Server数据类型具有100纳秒,像.NET的分辨率,所以可以是合适的替代品.


Mag*_*nus 5

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