サブクエリのために遅くなりますが、QueryOver を使用して目的の結果を得ることができます。
var sums = repo.Session.QueryOver<Tutorials>()
.SelectList(list => list
.SelectSubQuery<Tutorials>(NHibernate.Criterion.QueryOver.Of<Tutorials>()
.Where(t => t.IsWithdrawn)
.ToRowCountQuery())
.SelectSubQuery<Tutorials>(NHibernate.Criterion.QueryOver.Of<Tutorials>()
.ToRowCountQuery())
)
.Take(1) // we want only one row in our result. In SQL I would use " from dummy".
.List<object[]>();
説明:
分離された 2 つの QueryOver を使用します。1 つ目は IsWithDrawing = true であるチュートリアルの行をカウントし、2 つ目はすべての行を 1 回カウントします。切り離された 2 つの QueryOver は、Projection (SelectList) を使用して通常の QueryOver で SubQuery として使用されます。
生成された SQL は次のとおりです。
SELECT TOP (1)
(SELECT count(*) as y0_ FROM [Tutorials] this_0_
WHERE this_0_.IsWithdrawn = True) as y0_,
(SELECT count(*) as y0_ FROM [Tutorials] this_0_) as y1_
FROM [Tutorials] this_;