1

私は2つの列(文字列とブール)を返すNhibernateクエリを持っています。結果を辞書に変換したい私は、利用可能な変圧器がある知っているが、私は、これは辞書にNHibernate QueryOver結果を変換する

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

辞書のキーはどれですか? '名前'か 'モデレーター'? –

答えて

1

を働い取得する方法を確認していない私はは(あなたがあなた自身を書くことができ)、これを行うことができ、変圧器であっ組み込まれているとは思わないが、それは可能性がありますクエリ結果を元に戻した後に少しだけLINQを書くだけで十分です。

辞書はどのように見えるかによって異なりますが、参考になる例があります。あなたがキーがtrueまたはfalseであり、モデレータと非モデレータを表す辞書を取得したいとし、その値がモデレータの名前を持つList<string>であるとします。その場合、あなたは書くことができます:List<object[]>を使用して

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

通常保守のための素晴らしいではありませんが、このような二つの性質のために、それはおそらく大丈夫です。より多くのプロパティを扱う場合は、クラスを作成してAliasToBeanを使用して、各行をそのクラスのインスタンスに変換することをお勧めします。

+1

IDictionary >を返すのはなぜですか?これは単にIDictionary 'ではなく、必要と思わない' GroupBy'をスキップしてください。 –

+0

それは確かにOPが望むものである可能性があります。質問には必ずしも十分な情報がありません。 –