【发布时间】:2016-02-06 03:21:22
【问题描述】:
我正在尝试检索根元素列表及其子集合,在子集合中应用子查询过滤器。这个子查询需要带上根的子元素的最后一次出现。
预期的结果是一个根元素的列表,其中每个元素在子集合属性中只有其子元素的最后一次出现。
这些元素的类表示:
public class Root {
public virtual long id { get; set; }
public virtual ISet<Child> childList { get; set; }
}
public class Child {
public virtual long id { get; set; }
public virtual DateTime occurrence { get; set; }
public virtual Root parent { get; set; }
}
我尝试使用 NHibernate 的 QueryOver 创建一个查询,不幸的是它没有按预期工作。
这是我尝试过的代码:
Root rootAlias = null;
Child childAlias = null;
var query = QueryOver.Of(() => rootAlias)
.Left.JoinAlias(
() => rootAlias.childList,
() => childAlias,
Restrictions.Where<Child>(
cd => cd.occurrence == QueryOver.Of<Child>()
.Where(cx => cx.parent.id == rootAlias.id)
.Select(cx => cx.occurrence)
.OrderBy(cx => cx.occurrence).Desc
.Take(1)
.As<DateTime>()
)
);
如果你们能帮助我解决这个问题,我会很高兴,或者甚至指出另一种方法来达到上述结果。
【问题讨论】:
标签: c# nhibernate