Я бы хотел использовать API страниц Kentico для воссоздания этого предложения SQL Where и сохранения скобок без изменений для измененного порядка операций:
WHERE ((EventEnd IS NULL OR EventEnd = '') AND EventStart < getdate())
OR EventEnd < getdate()
Примечание. Не переставлять этот примерработать правильно без скобок, потому что мой вопрос касается создания сложных условий с круглыми скобками с помощью API страниц.
Этот пример основан на теоретическом типе страницы календарного события, который имеет:
- обязательное поле даты начала,
- необязательное поле даты окончания.
Цель этого предложения WHERE - отфильтровать прошлые события путем поиска даты начала в прошлом, еслизначение даты окончания не существует;в противном случае он ищет значение даты окончания в прошлом.
Однако я не могу найти хороших примеров Kentico о том, как добиться этого вложения условий, не опуская необработанные строки SQL в запрос страниц (что и должно быть сделано).
Вместо этого я ищу умный способ использования .Where(..)
, .And(..)
, .Or(..)
и других соответствующих методов API для генерации вышеупомянутого предложения WHERE с измененным порядком операций без изменений.Класс WhereBuilder
также выглядит многообещающе, но, похоже, не вписывается в поток выполнения запроса страниц.
Вот пример запроса Pages, в который я пытаюсь воссоздать указанное выше предложение WHERE.без сброса необработанных строк SQL для условий:
using CMS.DataEngine;
using CMS.DocumentEngine;
using CMS.Helpers;
using CMS.Base;
var pages = new TreeProvider().SelectNodes()
.Published()
.OnSite(MySiteName)
.Types(CalendarEventPageType)
.NestingLevel(1)
.Path(calendarEventsPath, PathTypeEnum.Children)
/* Looking for clever code after this line...
How do I group these methods to get the desired order of operations with parenthesis?
*/
.Where(..)
.And(..)
.Or(..);