2012-03-27 53 views
3

我的代碼中存在以下情況,無法解決它。現狀 -如何使用NHibernate QueryOver加入

var grpA = Session.QueryOver(() => _employeeGroupRelation)); 
var grpB = Session.QueryOver(() => _employeeGroup)); 

// var grpC should join grpA and grpB on _employeeGroupRelation.groupID = _employeeGroup.ID 

問題 - 是否有某種方式使用QueryOver語法加入grpA和grpB? 是否可以在grpA或grpB上使用List()而不使用它,因爲它們每個都會保存近10,000條記錄,我不想將它們轉儲到內存中。 這是QueryOver的正確使用嗎?有沒有更清晰的方法來實現我想要解決的問題?

這可能是一個基本的疑問,但我是NHib和QueryOver的新手。

編輯 -

select * from employeeGroup a 
inner join employeeGroupRelation b on a.ID = b.ID 

這就是我想在SQL做。

+0

您可能會更有興趣詢問您在SQL中想要達到的目標。我不確定你上面想要做什麼。 – 2012-03-27 20:15:53

回答

8

最簡單的方式做到這一點:

session.QueryOver<EmployeeGroup>() 
    .JoinQueryOver(employeeGroup => employeeGroup.EmployeeGroupRelation) 
    .Take(1000) // The same as top in SQL, if you don't want load all of entities 
    .TransformUsing(Transformers.DistinctRootEntity) 
    .List(); 

「JoinQueryOver」 變 「EmployeeGroup」 和(取決於來自映射)相關的 「EmployeeGroupRelation」 作爲代理的LazyLoad

如果你不想使用LazyLoad,你可以這樣做:

session.QueryOver<EmployeeGroup>() 
    .Fetch(employeeGroup => employeeGroup.EmployeeGroupRelation).Eager 
    .Take(1000) // The same as top in SQL, if you don't want load all of entities 
    .TransformUsing(Transformers.DistinctRootEntity) 
    .List(); 

「取」 得 「EmployeeGroup」 和相關的 「EmployeeGroupRelation」(不是代理)

+0

什麼是員工組?你還沒有創建別名,這將失敗 – Baz1nga 2012-03-28 05:45:07

+0

O,對不起,我已經糾正。 – Anton 2012-03-28 08:23:11