Я пытаюсь отфильтровать страницы, которые видит пользователь, проверяя общие термины между пользователем и страницей. И пользователь, и страница имеют поле таксономии одного типа («Категория») с терминами «Стандартный» и «Премиум».
Если категория пользователя совпадает с категорией страницы, я хочу отобразить ее, в противном случае - нет. Это прекрасно работает со следующим IHqlQuery на PagePart:
context.Query.Where(a => a.ContentPartRecord<TermsPartRecord>()
.Property("Terms", "terms"),
x => x.InG("TermRecord.Id", ids));
где ids - список идентификаторов терминов пользователя.
Помимо указанных выше критериев, я также хочу отображать страницы, к которым не добавлены термины. Это прекрасно работает само по себе:
context.Query.Where(a => a.ContentPartRecord<TermsPartRecord>(),
x => x.IsEmpty("Terms")
Проблема в том, что я пытаюсь объединить два вышеуказанных условия. Я пробовал:
context.Query.Where(a => a.ContentPartRecord<TermsPartRecord>()
.Property("Terms", "terms"),
p => p.Or(x => x.InG("TermRecord.Id", ids), y => y.IsEmpty("Terms")));
Второе условие в операторе Or не работает, поскольку запрос уже находится в коллекции терминов.
Я также пробовал:
context.Query.Where(a => a.ContentPartRecord<TermsPartRecord>()
p => p.Or(x => x.InG("Terms.TermRecord.Id", ids), y => y.IsEmpty("Terms")));
Здесь первое условие неверно, поскольку я не могу получить доступ к элементу списка Условий с помощью "Terms.TermRecord". Это насколько мои возможности Hql идут. У вас есть какие-нибудь предложения? Заранее спасибо.