У меня есть этот старый проект, который нуждается в рефакторинге. Я начал переписывать некоторые запросы, используя новейшую версию Nhibernate. У меня есть этот запрос, который должен вернуть выписанный отдельный список идентификаторов с порядком. Проблема в том, что вы не можете сделать заказ по свойствам, которые не включены в оператор select. Но я не хочу выбирать другие столбцы, мне нужен только идентификатор.Nhibernate Distinct with Order By (Oracle DB)
Есть ли способ убедиться, что я только получаю идентификаторы и все еще получаю выбитый по перечню отдельный список?
Это упрощенная версия того, что я сейчас:
Student student = null;
Locker locker = null;
Teacher teacher = null;
Grade grade = null;
var baseQuery = SessionHandler.CurrentSession.QueryOver(() => student)
.JoinAlias(() => cat.Locker,() => locker)
.JoinAlias(() => cat.Teachers,() => teacher)
.JoinAlias(() => cat.Grades,() => grade));
if (gender.HasValue)
{
baseQuery.Where(() => student.Gender == gender.Value);
}
if (hallway.HasValue)
{
baseQuery.Where(() => locker.Hallway == hallway.Value);
}
...
baseQuery.Select(Projections.Distinct(Projections.Property(() => student.StudentId)));
baseQuery.OrderBy(b => student.Birthday, OrderSettings.Direction);
var results = baseQuery.Skip(50).Take(50).List<TKey>();
код, как это всегда бросает ORA-01791: не выбранного выражения. Кто-нибудь знает, как исправить это, используя подзапрос или что-то еще? Я не привык к Nhibernate, поэтому я действительно понятия не имел.
Извините за голландское право, я изменил DatumInplanning на BirthDay сейчас. Мне нужен заказ из-за пейджинга. Эти идентификаторы используются для другого выбора, но я выбираю только 50 каждый раз, и они должны быть в точном порядке, так как я хочу отображать их на экране. – Beejee
Я ответил, отредактировав свой ранее ответ. Пожалуйста, просмотрите и дайте мне знать, если это решит вашу проблему. –
Я знаю, что это работает, но нам также нужен отчет. Поскольку множество таблиц соединено (чтобы сделать некоторую фильтрацию), в результатах есть дубликаты. Но как только вы дате отчет, он потерпит неудачу, если вы не используете подзапросы, но я не могу понять, как заставить это работать в Nhibernate. – Beejee