NHibernate:如何将ExpandoResultTransformer与Session.QueryOver一起使用
我创建了一个ExpandoResultTransformer,用于将查询结果转换为要在UI中使用的dto。看起来是这样的:NHibernate:如何将ExpandoResultTransformer与Session.QueryOver一起使用,nhibernate,queryover,Nhibernate,Queryover,我创建了一个ExpandoResultTransformer,用于将查询结果转换为要在UI中使用的dto。看起来是这样的: public class ExpandoResultTransformer : IResultTransformer { public object TransformTuple(object[] tuple, string[] aliases) { dynamic toReturn = new Expan
public class ExpandoResultTransformer : IResultTransformer
{
public object TransformTuple(object[] tuple, string[] aliases)
{
dynamic toReturn = new ExpandoObject();
for (int i = 0; i < aliases.Length; i++)
{
((IDictionary<string, object>)toReturn)[aliases[i]] = tuple[i];
}
return toReturn;
}
public IList TransformList(IList collection)
{
return collection;
}
}
公共类ExpandoResultTransformer:IResultTransformer
{
公共对象转换元组(对象[]元组,字符串[]别名)
{
dynamic toReturn=新的ExpandooObject();
for(int i=0;i
当我对createSQLQuery使用它时,它工作得非常好
var contacts = _session.CreateSQLQuery("exec up_ClientContactsView @ClientId=:clientId")
.SetParameter("clientId", request.ClientId)
.SetResultTransformer(new ExpandoResultTransformer())
.List<dynamic>();
var contacts=\u session.CreateSQLQuery(“exec up\u clientcontacts视图@ClientId=:ClientId”)
.SetParameter(“clientId”,request.clientId)
.SetResultTransformer(新的ExpandoResultTransformer())
.List();
然而,当我试图用它对付QueryOver时,我遇到了麻烦。没有发送别名。所以我试着这样指定它们
var periodTables = _session.QueryOver<PeriodTable>()
.Where(x => x.ClientPolicy.Id == request.ClientPolicyId)
.SelectList(list => list
.Select(i =>i.Id).WithAlias(()=>info.PeriodTableId) !! does not work as dynamic cannot be used in expression error
.Select(i => i.Id).WithAlias(()=>"PeriodTableId" !!! does not work either as it cannot find member error
.TransformUsing(new ExpandoResultTransformer())
.List<dynamic>();
var periodTables=\u session.QueryOver()
.Where(x=>x.ClientPolicy.Id==request.ClientPolicyId)
.SelectList(list=>list
.Select(i=>i.Id)。WithAlias(()=>info.PeriodTableId)!!不作为动态工作,无法在表达式错误中使用
.Select(i=>i.Id)。WithAlias(()=>“PeriodTableId”!!!也不起作用,因为它找不到成员错误
.TransformUsing(新的ExpandoResultTransformer())
.List();
您知道如何传入别名吗?您可以使用匿名类型实例作为模板对象:
var template = new { PeriodTableId = 0 };
var periodTables = _session.QueryOver<PeriodTable>()
.Where(x => x.ClientPolicy.Id == request.ClientPolicyId)
.SelectList(list => list
.Select(i =>i.Id).WithAlias(()=>template.PeriodTableId)
)
.TransformUsing(new ExpandoResultTransformer())
.List<dynamic>();
var-template=new{PeriodTableId=0};
var periodTables=\u session.QueryOver()
.Where(x=>x.ClientPolicy.Id==request.ClientPolicyId)
.SelectList(list=>list
.Select(i=>i.Id).WithAlias(()=>template.PeriodTableId)
)
.TransformUsing(新的ExpandoResultTransformer())
.List();
太棒了,忘了匿名。