2015-02-10 1 views
0

Внутри дат базы данных сторонних производителей хранятся в виде строк в формате YYYYMMDD.Операции преобразования даты в linq в объекты

В SQL я мог бы использовать следующее заявление:

WHERE convert(datetime,convert(varchar(8),a.appt_date,112)) = convert(datetime,convert(varchar(8), dateadd(dd,+1,getdate()), 112)) 

Есть ли что-то подобное я могу сделать в LINQ к EF? Или это мой единственный вариант сделать это в памяти, например:

dim data = (from item in entities.itemsSet).ToList() 
dim filtered = from item in data 
     where Convert.ToDateTime(shift.starttime) >= startDate 
      && Convert.ToDateTime(shift.endtime) < endDate 
     select item 
+0

Вы попробовали свой второй пример без 'ToList()'? Он должен просто работать ([link] (http://stackoverflow.com/q/992189/335858)). – dasblinkenlight

+0

Во-первых, это * не * как вы сравниваете даты в SQL. Вы должны указать поле 'date' из' datetime' и сравнить его с параметром даты. SQL Server достаточно умен, чтобы преобразовать его в запрос диапазона. Во-вторых, почему 'Convert.ToDateTime', если базовое поле уже является датой? Если это не так, он использует неправильный тип и должен быть исправлен первым. –

+0

Только что заметил, что вы * делаете * хранить даты как строки. Сначала вам нужно исправить эту проблему. SQL Server имеет тип 'date'. Нет причин использовать строки для этого, и по многим причинам вы не должны этого делать. –

ответ

1

вы должны сделать что-то вроде:

dim d = SomeDate 
dim d0 = d.Date().ToString("yyyyMMdd") 
dim d1 = d.AddAys(1).ToString("yyyyMMdd") 
dim filtered = from item in data 
    where d0 >= startDate 
     && d1 < endDate 
    select item 

, который строить свою строку в коде и использовать его в качестве параметра в запросе. Таким образом вы сэкономите много времени на конвертацию для того же результата.

+0

На самом деле, вы * вызывают * преобразования таким образом, потому что вы вынуждаете SQL Server преобразовывать строки в даты, когда вам это не нужно. EF использует параметризованные запросы, поэтому даты всегда передаются как даты. Если основной файл не является датой - тогда есть ошибка, которая должна быть исправлена ​​ –

+0

@PanagiotisKanavos первая строка сообщения: Внутри моих дат DB хранятся в виде строк в формате YYYYMMDD. – tschmit007

+0

Это ошибка –