1

J'ai une requête Nhibernate qui me renvoie deux colonnes (chaîne et booléen). Je veux transformer le résultat en dictionnaire. Je sais qu'il ya des transformateurs disponibles, mais je ne suis pas sûr de savoir comment obtenir ce travailTransformer NHibernate QueryOver résultat à Dictionnaire

Session.QueryOver<Customer>() 
    .Where(x => x.Id == XXX) 
    .Select(x => x.Name, x => x.Moderator) 
+0

Quelle est la clé dans le dictionnaire? 'Nom' ou' Modérateur '? –

Répondre

1

Je ne pense il y a un transformateur intégré qui peut le faire (vous pouvez écrire votre propre), mais il pourrait Soyez assez simple pour écrire un peu de LINQ après avoir obtenu les résultats de la requête est assez bon.

Cela dépend de ce à quoi vous voulez que votre dictionnaire ressemble, mais voici un exemple qui pourrait vous aider. Dites que vous vouliez obtenir un dictionnaire où la clé est true ou false, représentant des modérateurs et des non-modérateurs, et la valeur est List<string> avec les noms des modérateurs. Dans ce cas, vous pouvez écrire:

IDictionary<bool, List<string>> moderatorDictionary = session.QueryOver<Customer>() 
    .Select(
     x => x.Name, 
     x => x.Moderator 
    ) 
    .List<object[]>() 
    .GroupBy(x => (bool)x[1], x => (string)x[0]) 
    .ToDictionary(grp => grp.Key, grp => grp.ToList()); 

L'utilisation List<object[]> est généralement pas grand pour maintenabilité, mais pour deux propriétés comme cela, il est probablement correct. Si vous travaillez avec plus de propriétés, il est préférable de créer une classe et d'utiliser AliasToBean pour transformer chaque ligne en une instance de cette classe.

+1

Pourquoi renvoyez-vous un 'IDictionary >' si ce n'est pas seulement 'IDictionary ' et sautez le 'GroupBy' dont je ne pense pas qu'il a besoin. –

+0

Cela pourrait certainement être ce que l'OP veut. Il n'y a tout simplement pas assez d'informations dans la question pour être sûr. –