在我的NHibernate映射中:
(1)'个人'包含姓名,地址,电话和注册的集合。 (2)'Enrollments'包含CourseOfferings,Statuses和Flags的集合。
以下内容返回包含注册和标志的多个结果(笛卡儿)的结果。最高级别(即个人)是不同的。
var query = session.QueryOver<Individual>()
.Left.JoinAlias(i => i.Names, () => name)
.Left.JoinAlias(i => i.Addresses, () => address)
.Left.JoinAlias(i => i.Phones, () => phone)
.Where(i => name.ToDate == null)
.Where(i => phone.ToDate == null)
.Where(i => address.ToDate == null)
.Where(i=>i.ContactId ==748)
.OrderBy(Projections.Property(() => name.NameOther)).Asc
.Left.JoinQueryOver(i => i.Enrolments, () => enrolment)
.Left.JoinAlias(s => s.Statuses, () => status)
.Left.JoinAlias(s => s.CourseOffering, () => courseOffering)
.Left.JoinAlias(s => s.Flags, () => flag)
.Where(s => status.ToDate == null)
.Where(s => flag.ToDate == null)
//.TransformUsing(Transformers.AliasToBean<StudentEnrolment>())
.TransformUsing(Transformers.DistinctRootEntity)
非常感谢任何帮助。
提前致谢, Dharmesh
答案 0 :(得分:0)
这不是理想的,但你可以使用id和子查询上的投影来实现它:
var subQuery = QueryOver.Of<Individual>()
... add all your restrictions ...
.Select(i => i.Id);
var results = session.QueryOver<Individual>()
.WithSubquery.WhereProperty(i => i.Id).In(subQuery)
.List();
然后,结果应包含具有正确集合的实体列表(除非您另行指定,否则延迟加载)
答案 1 :(得分:0)
我最终使用了Future&lt;&gt;查询。谢谢大家的帮助。