NHibernate ICritera子查询与父值合并
我想从ICriteria生成以下sqlNHibernate ICritera子查询与父值合并,nhibernate,Nhibernate,我想从ICriteria生成以下sql select c.Id, sum(c.Amount) Amount, (select COALESCE(max(AuditDate), c.WhenAdded) FROM Audit a WHERE c.Id = a.CId) StatusDate from c join l on c.Id = l.CId Group By c.Id, c.WhenAdded 到目前为止我有 ICriteria crit
select c.Id,
sum(c.Amount) Amount,
(select COALESCE(max(AuditDate), c.WhenAdded) FROM Audit a WHERE c.Id = a.CId) StatusDate
from c
join l
on c.Id = l.CId
Group By c.Id, c.WhenAdded
到目前为止我有
ICriteria crit = CurrentSession.CreateCriteria<C>()
.CreateAlias("L", "l")
.SetProjection(Projections.ProjectionList()
.Add(Projections.Group<C>(x => x.Id), "Id")
.Add(Projections.Sum("l.Amount"), "Amount")
.Add(Projections.SubQuery(DetachedCriteria.For<Audit>("ca")
.SetProjection(Projections.ProjectionList().Add(
Projections.SqlFunction("COALESCE",
NHibernateUtil.DateTime,
Projections.Max<ClaimAudit>(x=> x.AuditDate),
Projections.Property<C>(x => x.WhenAdded)), "StatusDate"))))
.SetResultTransformer(Transformers.AliasToBean<CDto>());
ICriteria crit=CurrentSession.CreateCriteria()
.CreateAlias(“L”、“L”)
.SetProjection(Projections.ProjectionList()项目)
.Add(projects.Group(x=>x.Id),“Id”)
.添加(预测金额(“l.金额”),“金额”)
.Add(Projections.SubQuery)(DetachedCriteria.For(“ca”)
.SetProjection(Projections.ProjectionList().Add(
Projections.SqlFunction(“合并”,
NHibernateUtil.DateTime,
Projections.Max(x=>x.AuditDate),
Projections.Property(x=>x.WhenAdded),“StatusDate”))
.SetResultTransformer(Transformers.AliasToBean());
但是我无法在子查询的合并中获取父列
添加时找不到属性C
我知道子查询正在子查询中查找名为WhenAdded的列,但不确定如何告诉它在父查询中查找?
有什么办法可以做到这一点吗
另外,我需要这样做,否则我会得到一个不正确的金额总和。因此,除非考虑到这一点,否则没有子查询,不建议重新编写
谢谢。将合并从子查询中移出,并使用别名限制Adit条目
ICriteria crit = CurrentSession.CreateCriteria<C>("c")
.CreateAlias("L", "l")
.SetProjection(Projections.ProjectionList()
.Add(Projections.Group<C>(x => x.Id), "Id")
.Add(Projections.Group<C>(x => x.WhenAdded), "WhenAdded")
.Add(Projections.Sum("l.Amount"), "Amount")
.Add(Projections.SqlFunction("COALESCE", NHibernateUtil.DateTime,
Projections.SubQuery(DetachedCriteria.For<Audit>()
.Add(Restrictions.PropertyEq("C.Id", "c.Id")
.SetProjection(Projections.Max<ClaimAudit>(x=> x.AuditDate)),
Projections.Property<C>(x => x.WhenAdded)), "StatusDate")))
// AliasToBean !?
.List();
ICriteria crit=CurrentSession.CreateCriteria(“c”)
.CreateAlias(“L”、“L”)
.SetProjection(Projections.ProjectionList()项目)
.Add(projects.Group(x=>x.Id),“Id”)
.Add(projects.Group(x=>x.WhenAdded),“WhenAdded”)
.添加(预测金额(“l.金额”),“金额”)
.Add(projects.SqlFunction(“COALESCE”),NHibernateUtil.DateTime,
Projections.SubQuery(DetachedCriteria.For())
.Add(限制、财产)Q(“C.Id”、“C.Id”)
.SetProjection(projects.Max(x=>x.AuditDate)),
Projections.Property(x=>x.WhenAdded)),“StatusDate”))
//别名比恩!?
.List();
snap,这就是我在大约2小时前发现的:)