var subQuery = DetachedCriteria.For<Lvl3>("lvl3")
.CreateAlias("Lvl2", "sublvl2", JoinType.InnerJoin)
.CreateAlias("Lvl1", "lvl1", JoinType.InnerJoin)
.Add(Restrictions.EqProperty("sublvl2.Id", "lvl2.Id")
.Add(Restrictions.Eq("lvl3.Id", 123)
.SetProjection(Projections.Property("lvl1.Id"));
Session.CreateCriteria<Lvl2>("lvl2")
.Add(Subqueries.PropertyIn("Lvl1.Id", subQuery));
Должен сделать свое дело.Я сделал предположение о том, как называются ваши сущности, так как 1Lvl и т. Д. Не являются действительными идентификаторами C #.Я также предположил, что столбец первичного ключа каждой таблицы был Id.Также обратите внимание, что это не даст тот же SQL, который вы ищете, но даст тот же результат.