Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# NHibernate(c.net)-自动将SQLQuery的结果映射到dto对象_C#_.net_Nhibernate - Fatal编程技术网

C# NHibernate(c.net)-自动将SQLQuery的结果映射到dto对象

C# NHibernate(c.net)-自动将SQLQuery的结果映射到dto对象,c#,.net,nhibernate,C#,.net,Nhibernate,到目前为止,对于NHibernate,我使用了实体映射,并没有真正参与到创建原始sql查询中,但有些事情出现了,我需要这样做 我遇到的问题是,我想自动将查询的列别名映射到Dto对象 这是可行的,但是我必须按照查询的顺序指定列别名 SQL NHibernate查询 var query = session.CreateSQLQuery(sql) .AddScalar("ColumnOne", NHibernateUtil.Int32) .SetResu

到目前为止,对于NHibernate,我使用了实体映射,并没有真正参与到创建原始sql查询中,但有些事情出现了,我需要这样做

我遇到的问题是,我想自动将查询的列别名映射到Dto对象

这是可行的,但是我必须按照查询的顺序指定列别名

SQL

NHibernate查询

var query = session.CreateSQLQuery(sql)
            .AddScalar("ColumnOne", NHibernateUtil.Int32)
            .SetResultTransformer(
                  NHibernate.Transform.Transformers.AliasToBean<MyDtoObject>()
            );
但是,有没有一种方法可以使NHibernate在不创建映射类的情况下自动实现查询中的列与Dto之间的映射

我见过一些在查询中使用别名的例子,例如

string sql = "select mycol1 as {ColumnOne} as ColumnOne from mytable"; /// ???
但无法使其工作,因为别名{ColumnOne}在作为sql语句发送到db之前似乎没有被替换

有什么想法吗

短暂性脑缺血发作


Sam

也许System.Linq.Dymanic会有帮助:

use System.Linq.Dynamic;

string ColumnAlisName = "ColumnOne";
var query = mytable.Select(String.Format("new (mycol1 as {0})",ColumnAlisName)); 

谢谢你的建议,但我真的不知道这有什么帮助?你知道我正在尝试将NHibernate SQLQuery的列别名自动映射到未映射的POCO对象吗?我不完全确定你在这里要做什么-你是否试图让NHibernate猜测DB列mycl1应该在DTO的ColumnOne中结束,而不显式告诉它?我不知道怎么可能。不,只使用别名映射poco对象。实际上,我已经通过在别名周围加上双引号将其正确地映射出来了。从mytable works中选择col1 ColumnOne,我现在要处理的问题是,数据库中的一个整数以十进制形式返回,这会在分配给MyDtoObject的int属性时引发异常。无法将System.Decimal类型分配给System.Int32类型的属性,可能是因为后端数据库是oracle,并且类型是number0dp。有没有办法将所有类型的x转换为系统类型的y?
string sql = "select mycol1 as {ColumnOne} as ColumnOne from mytable"; /// ???
use System.Linq.Dynamic;

string ColumnAlisName = "ColumnOne";
var query = mytable.Select(String.Format("new (mycol1 as {0})",ColumnAlisName));