Критерии Nhibernate объединяются с несколькими условиями - PullRequest
4 голосов
/ 26 ноября 2009

Кажется, я не могу найти какого-либо твердого ответа на эту проблему, я надеюсь, что кто-нибудь сможет мне здесь помочь.

Пример запроса:

select * from A a inner join B b on a.Id = b.Id Or a.Date = b.Date

По сути, я хочу знать, возможно ли реализовать вторую часть условия соединения, используя критерии, и, если возможно, как это сделать. Если кто-нибудь может, пожалуйста, дайте мне знать, это будет здорово! Большое спасибо!

Ответы [ 3 ]

1 голос
/ 26 ноября 2009

Возможно, но этот запрос более четко написан на HQL:

select a from A a, B b where a.Id = b.Id or a.Date = b.Date

Как видите, он почти такой же, как SQL.

0 голосов
/ 31 января 2013

, чтобы добавить условия, используйте выражения. Для дизъюнкции OR она менее сложна, если вы используете Expresion.In

session.CreateCriteria(typeof(A), "a").CreateCriteria("B", "b", NHibernate.SqlCommand.JoinType.FullJoin)
                             .Add(Expression.Eq("a.Date", a.Date))
                             .Add(Expression.Eq("b.Date", b.Date))
0 голосов
/ 30 ноября 2009

К сожалению, вы не можете определить соединения синтаксиса ANSI с NHibernate. С NH2 и далее вы можете определять их на HQL с помощью предложения WITH, и я так говорю, потому что, если вы используете решение Diego, вам придется устанавливать шаблон ISNULL OR в своих запросах, если вы хотите выполнить несколько объединений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...