Сортировка по обнуляемому дочернему свойству в CoolStorage

#coolstora&e

#coolstora&e

Вопрос:

Допустим, у нас есть Films и HeaderItems. Иногда у фильма есть элемент заголовка, связанный с ним OneToOne, но не всегда.

Теперь я хочу отсортировать все фильмы по их названию, но я бы хотел, чтобы фильмы, к которым привязан элемент заголовка, сортировались по элементу заголовка.Позиция (если HeaderItem не равен null).

Я пытался реализовать OneToMany для Films и OneToOne, но я могу заставить сортировку работать. Он не может преобразовать выражение запроса в строку или наоборот.

Есть идеи, как это сделать?

Комментарии:

1. Поэтому сначала его нужно отсортировать по HeaderItem . Позиция (если она существует), а затем по названию? Это означало бы, что все записи с HeaderItem будут на первом месте.

2. Да, это была бы общая идея.

Ответ №1:

Хорошо, я разобрался.

Перво-наперво я изменил отношение между Film и HeaderItem на OneToMany.

Затем я использовал

 Film.OrderedList("$ISNULL(HeaderItem.ShowOnTopInCate&ory, 0)-, Top10, MovieTitle");
  

чтобы получить список фильмов, упорядоченных сначала по заголовочным элементам, а затем по остальным.

Отлично работает. Кстати, знак $ перед ISNULL позволяет избежать замены ISNULL анализатором SQL CoolStora&e.

Ответ №2:

Я не пробовал, но это действительно может сработать:

   Film.List().OrderedBy("HeaderItem.Position,Title");
  

Если это не сработает, боюсь, вам придется создать представление или выполнить ad-hoc SQL, используя операторы CASE в вашем предложении ORDER BY .

Комментарии:

1. Хорошо, это работает нормально, но в другом запросе мы не можем выбирать только фильмы, у которых теперь есть HeaderItem. имеет значение NULL или НЕТ, не работает.