LINQ to Entities DateTime не соответствует - PullRequest
3 голосов
/ 22 ноября 2011

У меня есть следующий код 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 ]

8 голосов
/ 22 ноября 2011

Разрешение поля DateTime в SQL Server отличается от разрешения для класса DateTime .NET.

Из MSDN - datetime (Transact-SQL) :

Точность: округляется с шагом .000, .003 или .007 секунд

Итак, в вашем случае, миллисекунды округляются до .007, давая .3470000 вместо .3450602.

Тип данных * SQL Server DateTime2 имеет разрешение 100 нано секунд, как и .NET, поэтому может подойти для замены.

5 голосов
/ 22 ноября 2011

Я думаю, это потому, что вы используете столбец DateTime в базе данных.Он не обладает такой же точностью, как тип DateTime в .NET.Попробуйте вместо этого использовать тип столбца DateTime2 в базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...