2017-02-06 3 views
1

У меня есть запрос Linq:Использование EntityFunctions без рамки сущности

people.Where(x => EntityFunctions.DiffHours(x.CreateDate, dtMatch) > 0) 

, что делает работу только в Linq 2 Entities.

Как заставить этот метод работать без сущностей?

То, что я пытался до сих пор:

people.Where(x => (x.CreateDate - dtMatch).TotalHours > 0) 

... кажется, дает другой результат

+0

people.Where (х => (x.CreateDate - dtMatch) .TotalHours> 0) обычно работает. Не могли бы вы рассказать нам, в чем разница между этими двумя заявлениями, которые вы видели? – Teja

ответ

1

Короче говоря: Для того, чтобы сделать 2 заявления эквивалентно изменение TotalHours к Math.Floor((x.CreateDate - dtMatch).TotalHours)


people.Where(x => Math.Floor((x.CreateDate - dtMatch).TotalHours) > 0) 

TotalHours вернет десятичную дробь. Поэтому, если между этими двумя датами было 30 минут, то возвращается 0.5. Так как .5 больше 0, это возвращает true. Если вы хотите, чтобы целые часы меняли его на Math.Floor (TotalHours) вместо TotalHours. Это округляет его до следующего по величине целого числа.


EntityFunctions.DiffHours - Это возвращает целое число, представляющее целое число часов, так что, если это было 30 мин. то результатом будет 0.

+2

Использование часов получает только компонент часов, который всегда меньше 24. Это плохая идея! – Teja

+0

@Teja - хорошая точка, позвольте мне обновить. – Igor

+0

@Teja - обновлено ... – Igor

1

Возможно, вам следует рассмотреть случай, если dtMatch закончится CreateDate и в случае, если он находится в:

people.Where(x => Math.Abs((x.CreateDate - dtMatch).TotalHours) > 0) 
Смежные вопросы