Выбор подзапроса из DetachedCriteria - PullRequest
2 голосов
/ 06 марта 2020

У меня есть следующие критерии и 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));
...