Как ограничить количество строк только левой части соединения с QueryOver?

Take() ограничивает общее количество строк всего результата запроса, но мне нужно ограничить только строки левой стороны объединения, чтобы получить 50 пользователей и все их символы:

 session.QueryOver<User>(() => userAlias)
            .Where(...)
            //.Take(50) - can't do this! 
            .JoinAlias(x => x.Characters, () => characterAlias, JoinType.LeftOuterJoin)
            .Select(...)
            .TransformUsing(Transformers.AliasToBean<UserDto>())
            .Take(50)
            .List<UserDto>();

Этот запрос должен быть выполнен через QueryOver.

Пример sql:

SELECT u.id, u.nickname, c.class_id, c.xp FROM (
   (SELECT id, nickname FROM users WHERE lower(nickname) LIKE 'abcd%' LIMIT 50) as u
   LEFT OUTER JOIN characters c ON c.user_id = u.id
)

Является ли это возможным?

1 ответ

Решение

HQL не поддерживает это. Единственный вариант здесь - использовать чистый SQL-запрос.

Другие вопросы по тегам