0

在我的 NHibernate 映射中:

(1) “个人”包含姓名、地址、电话和注册信息的集合。(2) “注册”包含 CourseOfferings、状态和标志的集合。

以下为 Enrollments 和 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)

非常感谢任何帮助。

在此先感谢,达梅什

4

2 回答 2

0

我最终使用了 Future<> 查询。感谢大家的帮助。

于 2013-12-03T05:46:56.967 回答
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();

结果应包含具有正确集合的实体列表(除非您另有指定,否则延迟加载)

于 2013-10-28T09:33:25.810 回答