Как сравнить дату с миллисекундами с LINQ - PullRequest
4 голосов
/ 25 августа 2010

Я пытаюсь сделать запрос к моей базе данных с помощью LINQ to SQL.

пример:

var t = from a in context.A where a.date == myDate select a;

Проблема в том, что дата из SQL возвращалась с миллисекундами, переменная myDate содержит deхорошие миллисекунды, но когда я сравниваю дату вместе, сравнение не является достоверным, потому что вывод myDate по умолчанию - MM / dd / yyyy ЧЧ: мм: сс и sql возвращают ММ / дд / гггг ЧЧ: мм: сс: ффф.

Как я могу получить дату с миллисекундами?

Ответы [ 3 ]

5 голосов
/ 25 августа 2010

Похоже, вы хотите сравнить дату и время в .NET с точностью до миллисекунды с датой и временем SQL с точностью до миллисекунды.

При тестировании похоже, что SQL, сгенерированный LINQ To SQL, имеет дефект: он неправильно округляет внутреннее хранилище тиков до строкового представления.

Я отправил это в Microsoft Connect: https://connect.microsoft.com/VisualStudio/feedback/details/589054 Попробуйте репродукцию!

Чтобы обойти этот дефект, в котором миллисекунды в вашем DateTime неправильно округлены в сгенерированном SQL, рассмотрите возможность выбора каждого элемента вашей даты и сравнения каждого элемента (что, я знаю, смешно):

DateTime d = DateTime.Parse("Jan 1 2010 09:44:33.0110");

var t = m.Msgs.Where(mm => 
                mm.CreatedOn.Value.Date == d.Date
             && mm.CreatedOn.Value.Hour == d.Hour
             && mm.CreatedOn.Value.Minute== d.Minute
             && mm.CreatedOn.Value.Second == d.Second
             && mm.CreatedOn.Value.Millisecond == d.Millisecond);
4 голосов
/ 25 августа 2010

Это тот случай, когда одна из ваших дат имеет точность в миллисекунды, а другая нет?В этом случае я был бы склонен попробовать что-то вроде этого:

var t = from a in context.A where SqlMethods.DateDiffSecond(a.date, myDate) == 0 select a;

На этой странице показаны методы / свойства DateTime, которые поддерживаются Linq to SQL.

0 голосов
/ 11 ноября 2016

Проверьте эту ссылку на SO

source = source.Where(o => 
  o.TaskStartDate.Value.AddTicks(-(o.TaskStartDate.Value.Ticks % TimeSpan.TicksPerSecond)) == dtStartDate);

та же проблема, с которой вы столкнулись, у меня есть разрешение в течение 5 минут.

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