2015-02-04 3 views
0

У меня есть следующий запрос;Запрос с диапазоном дат

foreach (Item sourceChild in source.Axes.GetDescendants() 
.OrderBy(x => x["date-optional-1"]) 
.ThenBy(x => x["date-optional-2"]) 
.Reverse()) 
{..} 

дата-необязательный-1 и 2 являются, как указано в названии, необязательно и, следовательно, не гарантируются. Но если они есть, то 1 имеет приоритет над 2. Мне нужно добавить, что если ни один не подан, мне нужны только предметы с сегодняшнего дня и вперед (это дата события). Как я могу это сделать в Where()?

+0

Означает ли это, что вы хотите, чтобы все события, имеющие «пустую» дату, необязательно-1 или события с «date-optional-1» заполнены и> = СЕГОДНЯ? –

ответ

2
foreach (Item sourceChild in source.Axes.GetDescendants() 
.Where(x => DateUtil.ParseDateTime(x["date-optional-1"], DateTime.MaxValue) >= DateTime.UtcNow.Date) 
.OrderBy(x => x["date-optional-1"]) 
.ThenBy(x => x["date-optional-2"]) 
.Reverse()) 
{..} 

DateUtil.ParseDateTime преобразует строковое значение 'дата-факультативно-1' в поле DateTime.

Sitecore хранит даты в UTC, поэтому мы сравниваем значение DateTime с DateTime.UtcNow.Date. Это включает в себя только элементы с «date-optional-1» value> = today в результирующем наборе.

DateTime.MaxValue передается как второй параметр DateUtil.ParseDateTime, так что элементы, не имеющие значения «date-optional-1», включаются в набор результатов.