2012-01-19 2 views
1

Я предпочитаю использовать что-то вроде этого:NHibernate CreateSQLQuery -> Словарь <int, int>

return NHibernateSession.Current.CreateSQLQuery 
(
@" 
    some sql 
" 
) 
.SetResultTransformer(NHibernate.Transform.Transformers.AliasToBean(typeof(someviewmodel))) 
.List<someviewmodel>(); 

отобразить мой вывод SQL в ViewModel. Является ли довольно простым достичь того же сопоставления с Словарем, используя CreateSQLQuery, который выводит два столбца int?

Спасибо.

ответ

2

Вам необходимо создать собственный трансформатор и указать его в своем вызове SetResultTransformer.

Это может выглядеть примерно так:

public class CustomDictionaryTransformer : IResultTransformer 
{ 
    public object TransformTuple(object[] tuple, string[] aliases) 
    { 
     KeyValuePair<int, int> result = new KeyValuePair<int, int>(); 
     for (int i = 0; i < tuple.Length; i++) 
     { 
      string alias = aliases[i]; 
          var val = new KeyValuePair<int, int>(); 
          if (alias == "key") result.Key = (int)tuple[i]; 
          else result.Value = (int)tuple[i]; 
     } 

     return result; 
    } 

    public IList TransformList(IList collection) 
    { 
     return collection; 
    } 
} 
+1

Спасибо. Выглядит сложнее, чем писать viewmodel с 2 ints, которые я сделал в настоящее время. Спасибо, в любом случае. – cs0815

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