Мне нужно сравнить выбранную дату из календаря (startdat & enddat) с датой в моей базе данных SQL 2008 R2. Я должен написать его с LINQ, но в представлении, которое у меня есть, DateTime преобразуется в String (Varchar), поэтому мне нужно преобразовать его в свой запрос LINQ Query обратно в DateTime. Мой основной запрос выглядит следующим образом:
var reportlist = (from r in context.Monthly_Report
where r.CreateDate >= startdat && r.CreateDate <= enddat
select r.Ticketnumber).ToList();
Итак, CreateDate
я получаю String
и для сравнения я должен ее преобразовать. Я пробовал это с Convert.ToDateTime()
но есть проблема с L2E. Итак, как я могу преобразовать его, как в SQL Script, или что SQL знает, что я имею в виду?
Спасибо за каждую помощь, которую я получаю. (btw мне не разрешено изменять представление)
Вы можете использовать только уменьшенный набор функций в Linq для Entities. Эти функции будут транслироваться на функции БД.
Вы можете использовать:
Ни одна из этих групп не включает функцию, которая может конвертировать из строки в datetime, поэтому нет никакого способа сделать это напрямую.
Вы должны искать альтернативы:
startdat
и enddat
в тот же формат и сравните его в enddat
(буквенном) порядке.По сути, вам нужно ваше мнение, чтобы вернуть дату и время.
Однако есть несколько способов сделать это.
1) Вы можете вытащить свои данные в виде строки в объект списка. Тогда вы не будете использовать L2E.
var temp = (from r in context.Monthly_Report
select new { r.Ticketnumber, r.CreateDate} ).ToList();
var reportList = temp.Where(r =>
Convert.ToDateTime(r.CreateDate) >= startdat &&
Convert.ToDateTime(r.CreateDate) <= enddat)
2) Вы можете преобразовать свое время в строку и сравнить его.
var reportlist = (from r in context.Monthly_Report
where r.CreateDate.CompareTo(startdatasstring) >= 0 &&
r.CreateDate.CompareTo(enddatasstring) <= 0
select r.Ticketnumber).ToList();