2009-09-17 13 views
1

J'utilise NHibernate comme couche de persistance et j'ai beaucoup d'endroits dans mon code où j'ai besoin de récupérer toutes les colonnes d'une table spécifique (pour montrer dans une grille pour exemple) mais j'ai aussi besoin d'un moyen rapide d'obtenir des éléments spécifiques de cette collection. L'API ICriteria permet d'obtenir le résultat de la requête sous la forme d'une valeur unique de T ou d'un IList de T. Je me demande s'il existe un moyen de faire en sorte que NHibernate me donne ces objets en IDictionary où la clé de l'objet Id et la valeur est l'objet lui-même. le faire moi-même me fera parcourir la liste originale qui n'est pas très évolutive.NHibernate - Obtenir les résultats en tant qu'IDictionary au lieu de IList

Merci.

Répondre

1

Si vous travaillez avec .NET 3.5, vous pouvez utiliser la méthode Enumerable() de IQuery, utilisez la méthode d'extension IEnumerable<T>.ToDictionary():

var dictionary = query.Enumerable().ToDictionary(r => r.Id); 

De cette façon, la liste ne serait pas itérer deux fois plus.

Vous mentionnez l'utilisation de ICriteria, mais cela ne permet pas d'énumérer paresseusement les éléments, contrairement à IQuery. Cependant, si le nombre d'éléments retournés par votre requête est trop important, vous pouvez envisager d'interroger la base de données avec la clé que vous auriez utilisée par rapport à l'instance IDictionary.

+0

Merci Jérôme, Savez-vous pourquoi l'interface ICriteria ne fournit pas aussi la méthode Enumerable()? Pourquoi devrais-je utiliser IQuery sur ICriteria? –

Questions connexes