2012-11-28 52 views
3

顯示如下,我有讓NHibernate的3.3.2.4000生成排序依據子句中使用正確的子查詢的問題:NHibernate的查詢<T>/queryover <T>排序依據的子查詢

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人與之相關。任務有一個IList屬性。

我該如何讓Nhibernate生成正確的子查詢?據我得到的是這樣的與查詢API:

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

,但我不確定我怎樣才能正確地生成where子句中顯示的原始SQL查詢。這可能更容易使用queryover API來完成嗎?

任何建議或指導是最受歡迎的。

回答

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

感謝您的反饋@Firo。子查詢中的select子句給出錯誤無法解析的方法select(lamda expression)。任何線索? – andersr

+0

不,不是真的。它是運行時還是編譯器錯誤? – Firo

+0

這是一個編譯器錯誤。 – andersr

相關問題