NHibernate CreateSQLQuery - &gt; Dictionary <int,int =“”> </int,>

时间:2012-01-19 16:08:22

标签: nhibernate

我倾向于使用这样的东西:

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

将我的sql输出映射到viewmodel。在使用CreateSQLQuery喷出两个int列时,实现与Dictionary相同的映射是否非常简单?

感谢。

1 个答案:

答案 0 :(得分: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;
    }
}