2010-03-11 3 views
0

Мне нужно сравнить три даты в запросе linq (datetime a < datetime b < datetime c), но просто свойства месяца и дня. Как мне это сделать?DateTime сравнение вопроса

+3

Можете ли вы показать нам, что вы до сих пор? –

ответ

3

Вы можете создать новый DateTime с текущего года:

var year = DateTime.Now.Year; 
var dateATemp = new DateTime(year, dateA.Month, dateA.Day); 
var dateBTemp = new DateTime(year, dateB.Month, dateB.Day); 
var dateCTemp = new DateTime(year, dateC.Month, dateC.Day); 

Теперь сравните dateATemp < dateBTemp < dateCTemp

Вы могли бы напишите метод расширения из DateTime, который вернет вам новый экземпляр DateTime с текущим годом:

public static DateTime ToDateTimeWithCurrentYear(this DateTime value) 
{ 
    return new DateTime(DateTime.Now.Year, value.Month, value.Day); 
} 

и использовать его как это:

dateA.ToDateTimeWithCurrentYear() < dateB.ToDateTimeWithCurrentYear() < dateC.ToDateTimeWithCurrentYear() 
+1

Следите за високосными годами! Если дата пользователя 29 февраля, но 'DateTime.Now' не в високосный год, вы попадете в исключение. Кроме этого, это похоже на то, что я предложил бы так +1. – LukeH

+0

спасибо. Идея сделать этот метод действительно крута. – Varyanica

+0

@ Luke, очень хороший улов с високосным годом. Не думал об этом. –

3

Это то, что вы ищете:

(a.Month < b.Month || (a.Month == b.Month && a.Day < b.Day)) && (b.Month < c.Month || (b.Month == c.Month && b.Day < c.Day)) 
+0

спасибо, я закончил сравнение, подобное твоему. – Varyanica