Nhibernate query<T>/queryover<T> orderby 子查询

标签 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个人与之相关。即 Task 有一个 IList 属性。

如何让 Nhibernate 生成正确的子查询?我已经通过查询 API 达到了这样的程度:

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

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

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

最佳答案

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();

关于Nhibernate query<T>/queryover<T> orderby 子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13600329/

相关文章:

php - 使用 PHP 显示和排序 MySQL 数据库中的多个结果

sql - PostGIS 按 ST_Distance 排序 - 不按距离排序记录

MySQL 子选择多个条件

nhibernate - 如果它是可选的,为什么我需要为我的投影设置别名?

mysql - UNION 生成重复行

c# - Fluent NHibernate - 一对至多 (1 – 0..1) 关系

mysql - 对 MySQL 子查询感到困惑

mysql - 如何使用 MySQL 计算每个组的用户数?

c# - Fluent NHibernate - HasMany 复合键

.net - 在 NHibernate 中按公式字段排序