2012-05-23 4 views
2

Этот код ломается, я думаю, потому что есть время в SubmittedDt и DateTimeToday. Как исправить это, чтобы фильтровать только даты НЕ время.Сравнение Date Without Time Lambda

DailyOrder todaysOrderNotReset = dailyOrders.Where(x => x.SubmittedDt == DateTime.Today && x.IsResetDone == false).First(); 

ответ

7
x.SubmittedDt 

должен быть

x.SubmittedDt.Date 

... хотя вы на самом деле не нужны, потому что Where первый (или FirstOrDefault) должен обрабатывать то, что вы хотите.

dailyOrders.First(x => x.SubmittedDt.Date == DateTime.Today && x.IsResetDone == false); 
+0

... а также 'DateTime.Today.Date'. – BeemerGuy

+0

'DateTime.Today.Date' не нужно, потому что' Today' уже не имеет времени. –

+0

Ох ... ты прав; Я просто попробовал и никогда не думал об этом раньше. – BeemerGuy

2

Попробуйте

DailyOrder todaysOrderNotReset = dailyOrders.Where(x => x.SubmittedDt.Date == DateTime.Today && x.IsResetDone == false).First(); 
0
DateTime today = DateTime.Today; 
DailyOrder todaysOrderNotReset = dailyOrders.First(x => 
    x.SubmittedDt.Date == today && x.IsResetDone == false); 

При сравнении текущей даты/времени с коллекцией предметов, вы должны предпочтительно сначала прочитать текущую дату/время в локальную переменную, а затем использовать это постоянное значение для ваших сравнений. В противном случае вы рискуете, что текущая дата/время изменится во время вашего исполнения и дадут неожиданные результаты.