2010-11-15 8 views
3

J'ai récemment mis à niveau mon fournisseur Linq vers le nouveau AST. (NH3 sur NuGet)nhibernate linq: projection vers DTO et colonnes

Avec le fournisseur précédent j'utilisais linq pour faire "des projections en ligne à mon DTO" par exemple.

from o in Session.Query<MyObject>() 
select new MyObjectDTO { 
Name = o.Name, 
SubName = o.OtherObject.Name, 
Sub2NAme = o.OtherObject2.Name 
} 

et cela générerait une déclaration

SELECT o.Name, sn1.Name, sn2.Name FROM ..... 
JOIN.... JOIN.... 

.

Une fois que j'ai mis à jour mon fournisseur, j'ai trouvé beaucoup d'instructions de sélection tirées. (Mon objet projeté est plus complexe que ci-dessus). Je suis venu à travers Fetch/FetchMany, ce qui pourrait aider avec le nombre des requêtes, mais autant que je peux dire que cela signifie que l'objet complet reviendra pour chaque champ aplati dont j'ai besoin.

Y a-t-il un moyen de sélectionner le plus petit nombre de colonnes possible pour la projection, plutôt que de charger le graphique d'objet complet dans le projet?

Merci, Chris

Répondre

1

Il doit être quelque chose avec votre utilisation du résultat (comme itérer plusieurs fois le IQueryable), quelque chose de bizarre avec les correspondances, ou une certaine complexité qui a été retiré de l'exemple. J'ai juste essayé cette requête exacte, et une seule instruction SQL a été générée.