Nhibernate查询<;T>;/queryover<;T>;按子查询排序

Nhibernate查询<;T>;/queryover<;T>;按子查询排序,nhibernate,sql-order-by,subquery,queryover,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 我们有两个实体:Task和Person 一个任务可以有N个相关人员。即任务具有IList属性 如何使Nhiber

我在获取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 
我们有两个实体:
Task
Person

一个任务可以有N个相关人员。即任务具有IList属性

如何使Nhibernate生成正确的子查询?我已经通过查询API实现了如下功能:

query = query.OrderBy(x => x.Persons.Single(t => t.CustomerNumber));
但我不确定如何正确生成原始sql查询中显示的where子句。使用QueryOverAPI是否更容易做到这一点

欢迎提供任何建议或指导。

Task Task=null
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();
Person=null; var subquery=QueryOver.Of() .Where(t=>t.Id==task.Id) .JoinQueryOver(t=>t.person,()=>person) .其中(p=>p.IsMain) .选择(()=>person.CustomerNumber); var query=session.QueryOver(()=>task) .OrderBy(投影.子查询(子查询)) .FetchMany(x=>x.Persons) 返回query.List();
感谢您的反馈@Firo。子查询中的select子句给出了无法解析方法select(lamda表达式)的错误。有什么线索吗?如果你写
。选择(=>person.CustomerNumber)