скажем, у меня есть 2 таблицы table1 (a, b) и table2 (c, a)
Мне нужно сделать что-то подобное, но с критериями NHibernate:
select a,b, (select count(*) from table2 t2 where t1.a = t2.a ) x from table1 t1
Кто-нибудь знает, как это сделать?
с проекциями. SubQuery
var l = session.CreateCriteria<Table1>("t1") .SetProjection(Projections.ProjectionList() .Add(Projections.Property("a"), "a") .Add(Projections.Property("b"), "b") .Add(Projections.SubQuery( DetachedCriteria.For<Table2>("t2") .SetProjection(Projections.RowCount()) .Add(Restrictions.EqProperty("t1.a", "t2.a"))), "x")) .SetResultTransformer(Transformers.AliasToBean<Table1WithTable2Count>()) .List<Table1WithTable2Count>();
Вы можете добавить пользовательский оператор SQL, сопоставив именованный запрос : http://www.sidesofmarch.com/index.php/archive/2009/02/11/executing-native-sql-using-nhibernate-named-queries/