2009-11-26 4 views
4

Je n'arrive pas à trouver une réponse solide au problème, j'espère que quelqu'un pourra m'aider ici.Nhibernate Criteria rejoindre avec plusieurs conditions

Exemple de requête:

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

Fondamentalement, je veux savoir s'il est possible de mettre en œuvre la deuxième partie de la condition de jointure en utilisant des critères, et s'il est possible, comment s'y prendre. Si quelqu'un peut me le faire savoir, ce sera génial! Merci beaucoup!

Répondre

1

Il est peut-être, mais cette requête est plus claire par écrit dans HQL:

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

Comme vous pouvez le voir, il est presque le même que le SQL.

+0

Bien que je ne peux pas utiliser exactement HQL en raison d'une enveloppe personnalisée que nous mettons pour modifier le résultat, mais il m'a donné bien sur la façon dont je peut changer la façon dont je l'interroge. Merci d'avoir pris le temps de répondre à ma question! – Akey

0

Malheureusement, vous ne pouvez pas définir de jointures de syntaxe ANSI avec NHibernate. Avec NH2 et plus, vous pouvez les définir sur HQL en utilisant une clause WITH et je le dis parce que si vous utilisez la solution de Diego, vous devrez configurer un modèle OUI ORNULL dans vos requêtes si vous voulez effectuer plusieurs jointures.

0

Pour ajouter des conditions, utilisez Expressions. Pour la disjonction OR, son moins complexe si vous utilisez 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)) 
Questions connexes