Fluent nhibernate 从DetachedCriteria中选择子查询
我有以下条件和detachedCriteriaFluent nhibernate 从DetachedCriteria中选择子查询,fluent-nhibernate,criteria,Fluent Nhibernate,Criteria,我有以下条件和detachedCriteria var criteria = Session.CreateCriteria<ItemAnalysis>("ia"); criteria.CreateAlias("ia.ItemInstance", "ii"); criteria.CreateAlias("ii.ScoreAdministration", "sa"); criteria
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 }
)
);
我们的解决方案是改变数据库。基本上,我们获取内部子查询结果并将其作为列存储在ItemAnalysis表中。对于我自己的教育,我仍然想知道如何做这作为一个标准。
// 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));