2015-07-01 2 views
1

Если я описывал право в названии, я хочу запросить значения datetime только по часам и минутам.Сравнивая время с LINQ to sql динамически

Фактически я хочу фильтровать строки в этот день по часам работы или нет.

Я попробовал его с добавлением часов чистого дата значения

elementsOturums.Where(i => i.EntryTime.Value.AddDays(1) < i.EntryTime.Value.Date.AddDays(1).AddHours(8).AddMinutes(30) 
                && i.EntryTime.Value > i.EntryTime.Value.Date.AddHours(17).AddMinutes(15)); 

но это дало ошибку, как;

Datepart millisecond не поддерживается функцией date datedd для даты типа данных.

Затем я попытался преодолеть с помощью метода, но снова он дал ошибку, например;

Метод '{0}' не поддерживает перевод на SQL.

Так как я могу достичь этой проблемы?

+0

i.EntryTime.Value> i.EntryTime.Value.Date.AddHours (17) .AddMinutes (15) это условие не должно быть истинным. –

+0

Вы не можете вызывать методы, которые поставщик данных не знает, как перевести его в SQL. Возможно, вы можете просто попробовать. Где (i => i.EntryTime.Value.Hour <8 && i.EntryTime.Value.Minute <30 ...) вот так. – Moozz

+0

[Аналогичный вопрос] (http://stackoverflow.com/questions/1227648/how-to-add-day-to-date-in-linq-to-sql) был задан раньше, ответы, приведенные там, полезны для эта проблема также. – tafa

ответ

1

Вы должны сравнить по TimeSpans:

var wdStart = TimeSpan.FromHours(8.5); 
var wdEnd = TimeSpan.FromHours(17.25); 

var result = elementsOturums.Where(t => t.EntryTime.HasValue) 
    .Where(t => t.EntryTime.Value.TimeOfDay >= wdStart 
      && t.EntryTime.Value.TimeOfDay <= wdEnd); 

Это дает вам детали в рабочее время.

+0

Отличный ответ спасибо. –