сортировка по количеству коллекций в nhibernate - PullRequest
2 голосов
/ 30 октября 2008

Есть ли способ упорядочить список объектов по количеству свойств, которые являются коллекцией?

В качестве аргументов, скажем, у меня есть объект вопроса со свойством имени вопроса, свойство, которое является коллекцией объектов ответа, и другое свойство, которое является коллекцией пользовательских объектов. Пользователи присоединяются к таблице вопросов с помощью внешнего ключа таблицы вопросов, а ответы объединяются с помощью средней таблицы присоединения.

Если я хочу, чтобы nhibernate получил список объектов "вопрос", я мог бы заказать его по Question.Answers.Count

Я попробовал пример документации с использованием HQL:

 List<Question> list = nhelper.NHibernateSession
        .CreateQuery("Select q from Question q left join q.Answers a group by q,a order by count(a)")
        .List<Question>();

но я получаю

"column Question.Name is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause" 

Я пытался добавить все свойства в группу по списку, но это не работает. Затем происходит то, что userId внешнего ключа вызывает ту же ошибку, что и выше, но я не могу включить его в группу, так как nhibernate перечисляет его как

Question.Users.UserId

, который не решает проблему, если включен.

есть идеи?

Ответы [ 2 ]

0 голосов
/ 31 октября 2008

я не могу использовать linq.

способ, которым я решил это (и вы можете решить, что это осел), состоит в том, чтобы создать вычисляемый столбец в базе данных, который рассчитывает количество с использованием UDF. Затем я пометил столбец в отображении гибернации как update = "false" и вставил = "false".

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

похоже, все работает хорошо, надеюсь, это не будет стоить мне слишком много производительности.

0 голосов
/ 30 октября 2008

Я столкнулся с этой проблемой и использовал Linq, чтобы обойти ее.

            var sort = from n in c
                       orderby q.Answers.Count
                       select n;

Я СЧИТАЮ, что это синтаксис, если бы кто-то мог убедиться, что это было бы здорово, я бы не использовал слишком много LINQ.

...