我有這個需要重構的舊項目。 我開始使用最新版本的Nhibernate重寫一些查詢。 我有這個查詢,需要返回一個分頁的不同的ID列表的順序。 問題在於,您似乎無法通過未包含在select語句中的屬性進行排序。但我不想選擇其他列我只想要的ID。Nhibernate與訂單不同(Oracle DB)
有沒有辦法確保我只能得到Id的,仍然得到一個分頁清單?
這是什麼,我現在有一個簡化版本:
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。 由於分頁,我需要訂單。這些ID用於另一個選擇,但我只選擇50每次,他們需要在確切的順序,因爲我想在屏幕上顯示它們。 – Beejee
我已經通過編輯我的回答了。請檢查,讓我知道這是否解決您的問題 –
我知道這個工程,但我們需要一個獨特的。 由於大量的表格被加入(進行一些過濾),結果中有重複。但是,一旦你達到一個獨特的,它將失敗,除非你使用子查詢,但我似乎無法弄清楚如何讓它在Nhibernate中工作。 – Beejee