NHibernate CreateSQLQuery->;字典<;int,int>;

NHibernate CreateSQLQuery->;字典<;int,int>;,nhibernate,Nhibernate,我倾向于使用这样的东西: return NHibernateSession.Current.CreateSQLQuery ( @" some sql " ) .SetResultTransformer(NHibernate.Transform.Transformers.AliasToBean(typeof(someviewmodel))) .List<someviewmodel>(); public class CustomDictionaryTransformer : I

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

return NHibernateSession.Current.CreateSQLQuery
(
@"
    some sql
"
)
.SetResultTransformer(NHibernate.Transform.Transformers.AliasToBean(typeof(someviewmodel)))
.List<someviewmodel>();
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;
    }
}
返回NHibernateSession.Current.CreateSQLQuery
(
@"
一些sql
"
)
.SetResultTransformer(NHibernate.Transform.Transformers.AliasToBean(typeof(someviewmodel)))
.List();
将sql输出映射到viewmodel。使用CreateSQLQuery输出两个int列时,实现到字典的相同映射是否非常简单


谢谢。

您基本上需要创建自己的变压器,并在
SetResultTransformer
调用中指定它

它可能看起来像这样:

return NHibernateSession.Current.CreateSQLQuery
(
@"
    some sql
"
)
.SetResultTransformer(NHibernate.Transform.Transformers.AliasToBean(typeof(someviewmodel)))
.List<someviewmodel>();
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;
    }
}
公共类CustomDictionaryTransformer:IResultTransformer
{
公共对象转换元组(对象[]元组,字符串[]别名)
{
KeyValuePair结果=新的KeyValuePair();
for(int i=0;i
谢谢。看起来比写一个包含2个int的viewmodel要复杂得多,我现在已经这么做了。无论如何,谢谢你。