到目前为止(使用NHibernate)我已经使用了实体映射而没有真正参与创建原始sql查询 - 但有些事情出现在我需要做的地方。
我遇到的问题是我想自动将查询的列别名映射到Dto对象。
这样可行,但我必须按查询顺序指定列别名。
SQL
string sql = "select mycol1 as ColumnOne from mytable";
NHibernate查询
var query = session.CreateSQLQuery(sql)
.AddScalar("ColumnOne", NHibernateUtil.Int32)
.SetResultTransformer(
NHibernate.Transform.Transformers.AliasToBean<MyDtoObject>()
);
MyDtoObject
public class MyDtoObject
{
public int ColumnOne {get;set;}
}
但是有没有办法让NHibernate自动化查询中的列和Dto之间的映射而不创建映射类?
我见过一些在查询中使用别名的例子,例如
string sql = "select mycol1 as {ColumnOne} as ColumnOne from mytable"; /// ???
但是无法让这个工作,因为别名{ColumnOne}在作为sql语句发送到db之前似乎不会被替换。
有什么想法吗?
TIA
萨姆
答案 0 :(得分:0)
也许System.Linq.Dynamic会提供帮助:
use System.Linq.Dynamic;
string ColumnAlisName = "ColumnOne";
var query = mytable.Select(String.Format("new (mycol1 as {0})",ColumnAlisName));