1

У меня есть запрос Nhibernate, который возвращает мне два столбца (строка и bool). Я хочу преобразовать результат в словарь. Я знаю, что есть трансформаторы доступны, но я не уверен, как получить эту работуПреобразование NHibernate QueryOver результат в словарь

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

Каков ключ в словаре? 'Имя' или' Модератор'? –

ответ

1

Я не думаю есть встроенный трансформатор, который может сделать это (вы можете написать свой собственный), но это может достаточно просто, чтобы записать немного LINQ после получения результатов запроса, достаточно хорошо.

Это зависит от того, как вы хотите, чтобы ваш словарь выглядел, но вот пример, который может помочь. Скажем, вы хотели получить словарь, где ключ true или false, представляющий модераторы и немодераторы, а значение - List<string> с именами модераторов. В этом случае можно было бы написать:

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

Использование List<object[]> обычно не велика для ремонтопригодности, но для двух свойств, как это это, вероятно, хорошо. Если вы работаете с большим количеством свойств, лучше всего создать класс и использовать AliasToBean, чтобы преобразовать каждую строку в экземпляр этого класса.

+1

Почему вы возвращаете 'IDictionary >', если это не просто 'IDictionary ' и пропустить 'GroupBy', который мне не кажется нужным. –

+0

Это, безусловно, может быть то, что хочет OP. В этом вопросе недостаточно информации. –

Смежные вопросы