Как написать запрос критериев с несколькими соединениями

StackOverflow https://stackoverflow.com/questions/372047

  •  21-08-2019
  •  | 
  •  

Вопрос

Я пытаюсь закодировать следующий запрос HQL, используя API критериев:

var userList = _session
                .CreateQuery("select u from User u where u.Role.ID=3 and u.Customer.ID=:cID")
                .SetInt32("cID", 1)
                .List<User>();

(3 объекта NHibernate:Пользователь(ID, Имя, Роль, Клиент), Роль(ID, Имя) и Клиент(ID, Имя).

Я попробовал следующее, но это не сработало, потому что NHibernate пытается найти клиента, связанного с ролью:

var userList = _session
            .CreateCriteria(typeof(User))
            .CreateCriteria("Role")
            .Add(Restrictions.Eq("ID", 3) )
            .CreateCriteria("Customer")
            .Add(Restrictions.Eq("ID", 1) )
            .List<User>();

Есть ли другой способ (который работает!) сделать это?

Это было полезно?

Решение

Вы можете использовать псевдоним

var userList = _session
        .CreateCriteria(typeof(User), "u")
        .CreateAlias("u.Role", "r")
        .Add(Restrictions.Eq("r.ID", 3) )
        .CreateAlias("u.Customer", "c")
        .Add(Restrictions.Eq("c.ID", 1) )
        .List<User>();

Надеюсь, поможет

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top