1

Ich habe Nhibernate Abfrage, die mir zwei Spalten (String und Bool) zurückgibt. Ich möchte das Ergebnis in ein Wörterbuch umwandeln. Ich weiß, es gibt Transformers zur Verfügung, aber ich bin nicht sicher, wie man diese ArbeitTransform NHibernate QueryOver Ergebnis zu Dictionary

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

Welches ist der Schlüssel im Wörterbuch? 'Name' oder' Moderator'? –

Antwort

1

ich nicht denken gibt es einen Transformator gebaut, die dies tun können (Sie Ihre eigenen schreiben könnte), aber es könnte einfach genug sein, dass ein bisschen LINQ nach dem Abrufen der Abfrageergebnisse gut genug ist.

Es hängt davon ab, wie Ihr Wörterbuch aussehen soll, aber hier ist ein Beispiel, das Ihnen helfen könnte. Angenommen, Sie möchten ein Wörterbuch mit dem Schlüssel true oder false, der Moderatoren und Nicht-Moderatoren darstellt, und der Wert ist List<string> mit den Namen der Moderatoren. In diesem Fall könnten Sie schreiben:

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()); 

Mit List<object[]> in der Regel nicht groß für Wartbarkeit, aber für zwei Objekte wie dies es ist wahrscheinlich in Ordnung. Wenn Sie mit mehr Eigenschaften arbeiten, erstellen Sie am besten eine Klasse und verwenden Sie AliasToBean, um jede Zeile in eine Instanz dieser Klasse umzuwandeln.

+1

Warum geben Sie ein 'IDictionary >' sollte dies nicht nur 'IDictionary ' sein und überspringen Sie die 'GroupBy', die ich glaube nicht, dass er braucht. –

+0

Das könnte sicherlich das sein, was das OP will. Es gibt nur nicht genug Informationen in der Frage, um sicher zu sein. –

Verwandte Themen