2009-05-05 6 views
0

Ceci est en partie lié à this.
Je voudrais trouver un moyen de trier un résultat de collection lié (HasMany) directement dans la requête Nhibernate. Correctement génère un select avec ORDER BY mais le résultat dans la collection liée n'est pas ordonné.Tri de la collection liée dans la requête Nhibernate

Je voudrais éviter de trier la collection après que le résultat soit retourné (comme utiliser linq aux objets) est-ce possible?

MISE À JOUR: Comme Steve a suggéré que le problème peut être résolu par coder en dur l'attribut d'ordre dans le mapping comme:

HasMany(x => x.PartialViews).KeyColumnNames.Add("PageId").AsBag().SetAttribute("order-by", "ColumnNumber"); 

Répondre

1

Avez-vous spécifié la collection comme un type de liste plutôt qu'un sac ou un ensemble? Si vous vous assurez d'utiliser un type de mappage de liste et de spécifier une colonne d'index pour le mappage de liste, tout doit être pris en compte pour vous.

Voir le docs here, et il y a quelques more info here aussi, bien que ce deuxième est un post plus ancien alors faites attention aux choses qui ont pu avoir changé.

Voici un exemple simple de mapping de la collection de la liste:

<list name="Images table="Images"> 
    <key column="Id"/> 
    <index column="Position"/> 
    <element type="String" column="FileName"/> 
</list> 

La cartographie couramment pour cet exemple serait quelque chose comme ceci:

HasMany(x => x.Images).AsList(x => x.WithColumn("Position")); 
+0

Steve, si je comprends bien cela me forcer à « coder en dur "l'ordre de tri. Il est possible d'obtenir une sorte de résultat dynamique avec Linq2Nhibernate ou autre? Sinon, comment exprimerais-tu la même cartographie dans le nhibernate fluide? – Ronnie

+0

Ronnie, je ne suis pas sûr d'obtenir un résultat dynamique sans trier après le retour de la collection en utilisant la méthode OrderBy. Je suppose qu'il n'y a aucun moyen de le faire de manière fiable et cela est dû à la nature des collections enfants dans un modèle d'objet DDD - sauf si la collection enfant a un ordre de tri inhérent (par exemple une liste plutôt qu'un ensemble ou un sac). avoir beaucoup de sens à partir d'une perspective de modélisation pour vous permettre de spécifier un ordre lors de la récupération des données. Je devrais vérifier la syntaxe de Fluent pour un mappage de liste - je mettrai à jour la réponse quand je le trouverai! –

Questions connexes