【发布时间】:2015-09-03 08:06:25
【问题描述】:
我有一个需要重构的旧项目。 我开始使用最新版本的 Nhibernate 重写一些查询。 我有这个查询需要返回一个分页的不同 ID 列表,并按顺序排列。 问题是您似乎无法对 select 语句中未包含的属性进行排序。但我不想选择我只想要 id 的其他列。
有没有办法确保我只获得 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: not a SELECTed expression。 有人知道如何使用子查询或其他东西来解决这个问题吗? 我不习惯 Nhibernate,所以我真的不知道。
【问题讨论】:
标签: c# oracle nhibernate queryover