Nhibernate查询<t> / queryover <t>由子查询命令</t> </t>

时间:2012-11-28 07:54:23

标签: nhibernate sql-order-by subquery queryover

我遇到问题,让Nhibernate 3.3.2.4000生成orderby子句中使用的正确子查询,如下所示:

select *
from dbo.Person p inner join dbo.Task t on p.Task_FK = p.TaskId    
order by (select p.CustomerNumber where p.IsMain=1) desc 

我们有两个实体:TaskPerson

一项任务可以有N个人与之相关。 I.e Task有一个IList属性。

如何让Nhibernate生成正确的子查询?我使用Query API获得了类似的东西:

query = query.OrderBy(x => x.Persons.Single(t => t.CustomerNumber));

但我不确定如何正确生成原始sql查询中显示的where子句。这可能更容易使用queryover api以某种方式完成吗?

非常欢迎任何建议或指导。

1 个答案:

答案 0 :(得分:1)

Task task = null
Person person = null;
var subquery = QueryOver.Of<Task>()
    .Where(t => t.Id == task.Id)
    .JoinQueryOver(t => t.Persons, () => person)
    .Where(p => p.IsMain)
    .Select(() => person.CustomerNumber);

var query = session.QueryOver(() => task)
    .OrderBy(Projections.SubQuery(subquery))
    .FetchMany(x => x.Persons)

return query.List();