Sql 将自定义查询映射到nHibernate中的对象
请看一看这个例子: () 假设我的结构具有以下定义:Sql 将自定义查询映射到nHibernate中的对象,sql,nhibernate,Sql,Nhibernate,请看一看这个例子: () 假设我的结构具有以下定义: public class YourDto { public int YourDtoId { get; set; } public string YourDtoTitle { get; set; } public List<YourDtoBook> YourDtoList { get; set; } } 此查询的结果如下所示: select yourColumn1 as YourDtoId, yourCol
public class YourDto
{
public int YourDtoId { get; set; }
public string YourDtoTitle { get; set; }
public List<YourDtoBook> YourDtoList { get; set; }
}
此查询的结果如下所示:
select yourColumn1 as YourDtoId, yourColumn2 as YourDtoTitle,
yourColumn3 as YourDtoList from YOUR_TABLE
YourDtoId| YourDtoTitle| YourDtoList
_____________________________________
1 |Jeff | book1
1 |Jeff | book2
2 |Kurt | book3
2 |Kurt | book4
如何正确映射这些实体?(即两个对象各有两个列表)使用QueryOver和映射类使用Fetch-Eager 可使用GroupBy直接发送至DTO:
var result = yourNhSession.CreateSQLQuery(@"
select yourColumn1 as YourDtoId, yourColumn2 as YourDtoTitle,
yourColumn3 as YourDtoList from YOUR_TABLE")
.List<object[]>()
.GroupBy(x => new
{
YourDtoId = (int) x[0],
YourDtoTitle = (string) x[1]
})
.Select(x => new YourDto
{
YourDtoId = x.Key.YourDtoId,
YourDtoTitle = x.Key.YourDtoTitle,
YourDtoList = x.Select(y => new YourDtoBook
{
Name = (string)y[2]
}).ToList()
});
public class YourDto
{
public int YourDtoId { get; set; }
public string YourDtoTitle { get; set; }
public List<YourDtoBook> YourDtoList { get; set; }
}
public class YourDtoBook
{
public string Name { get; set; }
}
var result=yourNhSession.CreateSQLQuery(@)
选择您的Column1作为您的数据对象,选择您的Column2作为您的数据主题,
您的专栏3作为您的“表格”中的数据列表)
.List()
.GroupBy(x=>new
{
YourDtoId=(int)x[0],
yourdotitle=(字符串)x[1]
})
.选择(x=>new YourDto
{
YourDtoId=x.Key.YourDtoId,
yourdotitle=x.Key.yourdotitle,
YourDtoList=x。选择(y=>newyourdtobook
{
Name=(字符串)y[2]
})托利斯先生()
});
公开课
{
public int YourDtoId{get;set;}
公共字符串yourdotitle{get;set;}
public List YourDtoList{get;set;}
}
公共类YourDtoBook
{
公共字符串名称{get;set;}
}
您可能需要发出两个单独的查询,一个用于获取“根”项,另一个用于获取相关列表