1

到目前为止(使用 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 语句发送到数据库之前似乎没有被替换。

任何想法?

TIA

山姆

4

1 回答 1

0

也许 System.Linq.Dynamic 会有所帮助:

use System.Linq.Dynamic;

string ColumnAlisName = "ColumnOne";
var query = mytable.Select(String.Format("new (mycol1 as {0})",ColumnAlisName)); 
于 2012-06-19T12:25:25.417 回答