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 = 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>());
しかし、子サブクエリの合体で親列を取得できません。次の例外が発生します
プロパティCが見つかりませんでした。
サブクエリが子クエリでWhenAddedという列を探していることは知っていますが、親を探すように指示する方法がわかりませんか?これを達成する方法について何かアイデアはありますか?
ps。私はこれをこの変換された方法で行う必要があります。そうしないと、金額の合計が正しくなくなります。したがって、これが考慮されない限り、サブクエリなしで書き直す提案はありません。
ありがとう。