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要复杂得多,我现在已经这么做了。无论如何,谢谢你。