我的代码中存在以下情况,但无法解决。情况 -
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 :(得分: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();
“Fetch”获取“EmployeeGroup”和相关的“EmployeeGroupRelation”(非代理)