我有以下条件和detachedCriteria。
var criteria = Session.CreateCriteria<ItemAnalysis>("ia");
criteria.CreateAlias("ia.ItemInstance", "ii");
criteria.CreateAlias("ii.ScoreAdministration", "sa");
criteria.Add(Restrictions.Eq("ii.ItemId", itemId));
var status = DetachedCriteria.For<ItemAnalysis>("ia_")
.CreateAlias("ia_.ItemInstance", "ii_")
.CreateAlias("ii_.ScoreAdministration", "sa_")
.Add(Restrictions.Eq("ii_.ItemId", itemId))
.SetProjection(
Projections.SqlProjection
(
"ia_.CTTItemStatId, RANK() OVER(Partition BY
sa_.ExamSeriesCode ORDER BY ia_.StatDate DESC) AS RowNm",
new string[] { "CTTItemStatId", "RowNm" },
new IType[] { NHibernate.NHibernateUtil.Int32,
NHibernate.NHibernateUtil.Int32 }
)
);
我需要一种方法来从具有该属性的分离查询中获取投影或第二个子查询,并添加RowNm = 1的限制。我查看了DetachedCriteria.CreateCriteria,但这需要关联路径。我还没有找到任何类似的例子。我确实尝试过
// what parameters should I be using here??
var subQuery = status.CreateCriteria(?, ?) // expects an association path and an alias
.Add(Restrictions.Eq("RowNm", 1))
.SetProjection(
Projections.Property("CTTItemStatId")
);
criteria = criteria.Add(Subqueries.PropertyEq("CTTItemStatId", subQuery));