J'ai la requête suivante qui travaille qui obtient les résultats que je veux: the Cette requête renvoie un databaseView code> a été mappé comme une entité de NHibernate réelle (afin que je puisse l'utiliser avec
Queryover code>), mais il n'est pas associé à
myObject code> dans les mappages HBM. p>
iliste
Sélectionnez ... à partir de MyObject où existe (sous-requête pour DatabaseView ici) code>. Comment puis-je ré-écrire ceci pour renvoyer les mêmes données, mais utiliser une jointure au lieu de sous-requête? P> p>
3 Réponses :
Vous pouvez vous joindre à des entités non liées avec Linq dans NHibernate 3+
assez drôle que vous utilisez le joindre code> Elément d'expression de requête: p>
from type1 in Repository.Query<MyType1>()
join type2 in Repository.Query<MyType2>()
on type1.Id equals type2.Id
Cela fonctionne réellement lors de la jonction avec deux instances code> iquéryable code>. Je suis émerveillé que cela fonctionne avec la mise en œuvre LINQ ( Query <> code>), mais pas avec
Queryover <> code>
Je réalise que cette question a 5 ans et la réponse "correcte" est définitivement que vous ne pouvez pas le faire avec Querlerover, car les autres réponses indiquent. Cependant, si vous La solution consiste à utiliser une "requête de chargeur" avec sql natif dans votre mappage XML pour produire une collection associée (voir http://nibernate.info/doc/nibernate-reference/Quiserysql.html#querysql-load ). Dans l'exemple spécifique de l'OP, vous allez aller de l'avant et cartographier votre Ensuite, nous devons simplement définir notre nommé DatabaseView code> comme une entité comme suggérée, puis écrivez ce qui suit dans votre mappage: p>
MyObitViewsloadQuery code> dans RAW SQL pour expliquer à NH Comment rejoindre les deux: p>
MyObject alias = null;
DatabaseView view = null;
var results = session.QueryOver<MyObject>(() => alias)
.JoinAlias( () => alias.MyViews, () => view )
//.Where( () => view.Property == "myValue" ) // optionally, restrict the view etc.
.List();
dans NHibernate 5.1+ Il est possible pour Querlerover / Critères via Entité rejoindre A>: critères exemple: p>
J'aime celui-ci parce que je n'ai pas besoin d'ajouter Remotion.Linq. Merci