Nhibernate с использованием пункта - PullRequest
3 голосов
/ 15 июня 2011

Я пытаюсь воспроизвести запрос с помощью API Nhibernate Criteria и не могу понять, как добавить условие критерия, позволяющее мне сравнивать два значения из разных таблиц.

Лучший тривиальный пример, который я мог бы придуматьwith ....

SELECT e.LastName
FROM Employee e
JOIN Chair c ON c.ChairId = e.ChairId
WHERE e.Weight > c.MaxLoad

Мои основные критерии Nhibernate

ICriteria criteria = base.Session.CreateCriteria(typeof(Employee));
criteria.CreateAlias("Employee.Chairid", "Chair", JoinType.InnerJoin);

Одна перегрузка создания псевдонима имеет дополнительный параметр "withClause", который, кажется, является предлагаемым способом достижения этой цели.но для жизни я не могу найти пример синтаксиса, который мне нужен для достижения этого.

Я думаю, что мне нужно что-то вроде ...

criteria.Add(Expression.Ge("Employee.Weight", "Chair.MaxLoad"));

но этоочевидно, не работает, так как второй параметр будет обработан как строковое значение.

Любая помощь приветствуется.

1 Ответ

1 голос
/ 04 августа 2011
var employeeNames = Session.CreateCriteria(typeof(Employee))
    .CreateAlias("Chair", "c") // InnerJoin is implied
    .Add(Restrictions.GtProperty("Weight", "c.MaxLoad"))
    .SetProjection(Projections.Property("LastName"))
    .List<string>();

Ограничения Restrictions.XxProperty() - это то, что вы ищете, которые сравнивают два свойства друг с другом.

...