NHibernate投影-如何从关联中投影值

NHibernate投影-如何从关联中投影值,nhibernate,Nhibernate,我试图在没有运气的情况下从实体的关联中投射一个值。只需要以下查询中TrainerAddress中的城市名称。培训师地址映射为培训师的一个组件 session.QueryOver<Trainer>() .JoinAlias(x=>x.TrainerAddress.City, ()=> cityAlias, JoinType.LeftOuterJoin) .OrderBy(x => x.Name).Asc .SelectList(list =>

我试图在没有运气的情况下从实体的关联中投射一个值。只需要以下查询中TrainerAddress中的城市名称。培训师地址映射为培训师的一个组件

session.QueryOver<Trainer>()
   .JoinAlias(x=>x.TrainerAddress.City, ()=> cityAlias, JoinType.LeftOuterJoin)
   .OrderBy(x => x.Name).Asc
   .SelectList(list => list
        .Select(x => x.Id).WithAlias(() => dto.Id)
        .Select(x => x.Name).WithAlias(() => dto.Name)
        .Select(x => x.TrainerAddress.City.Name).WithAlias(() => dto.City))//issue projecting here
  .TransformUsing(Transformers.AliasToBean<TrainerDTO>())
  .List<TrainerDTO>();
session.QueryOver()
.JoinAlias(x=>x.TrainerAddress.City,()=>cityAlias,JoinType.LeftOuterJoin)
.OrderBy(x=>x.Name).Asc
.SelectList(list=>list
.Select(x=>x.Id).WithAlias(()=>dto.Id)
.Select(x=>x.Name).WithAlias(()=>dto.Name)
.Select(x=>x.TrainerAddress.City.Name).WithAlias(()=>dto.City))//此处
.TransformUsing(Transformers.AliasToBean())
.List();

这可能吗?

您正在为TrainerAddress.City指定别名,但在任何地方都不使用该别名? 我不能100%确定NHibernate是否在QueryOver中很好地支持组件,我知道它在使用标准时存在一些问题,但这可能会起作用:

session.QueryOver<Trainer>()
   .JoinAlias(x=> x.TrainerAddress.City, ()=> cityAlias, JoinType.LeftOuterJoin)
   .OrderBy(x => x.Name).Asc
   .SelectList(list => list
        .Select(x => x.Id).WithAlias(() => dto.Id)
        .Select(x => x.Name).WithAlias(() => dto.Name)
        .Select(x => cityAlias.Name).WithAlias(() => dto.City))
  .TransformUsing(Transformers.AliasToBean<TrainerDTO>())
  .List<TrainerDTO>();
session.QueryOver()
.JoinAlias(x=>x.TrainerAddress.City,()=>cityAlias,JoinType.LeftOuterJoin)
.OrderBy(x=>x.Name).Asc
.SelectList(list=>list
.Select(x=>x.Id).WithAlias(()=>dto.Id)
.Select(x=>x.Name).WithAlias(()=>dto.Name)
.Select(x=>cityAlias.Name).WithAlias(()=>dto.City))
.TransformUsing(Transformers.AliasToBean())
.List();

这似乎是可能的。确切的问题是什么?很好,马丁。我指定要立即加载的联接。似乎使用别名成功了,并且似乎无法使用x.TrainerAddress.City.Name导航很高兴知道它起了作用-猜测他们已经改进了对组件的支持:)