我尝试将LINQ查询转换为NHibernate QueryOver,这是选择List<>的问题。在另一个List属性中的属性,它没有必要用QueryOver解决它,我接受另一个建议:
var alas = (from ala in session.Query<TB_ALA>()
select new TB_ALA
{
ID_ALA = ala.ID_ALA,
CD_ALA = ala.CD_ALA,
DS_ALA = ala.DS_ALA,
TB_QUARTO = (from quarto in ala.TB_QUARTO
select new TB_QUARTO
{
CD_QUARTO = quarto.CD_QUARTO,
TB_LEITO = (from leito in quarto.TB_LEITO
select new TB_LEITO
{
ID_LEITO = leito.ID_LEITO
}).ToList()
}).ToList()
}).ToList();
但是得到了以下错误:&#34;必须是可简化的节点&#34;
我的模型如下:
public class TB_ALA
{
public TB_ALA()
{
this.TB_QUARTO = new List<TB_QUARTO>();
}
//[Key]
public virtual long ID_ALA { get; set; }
public virtual string CD_ALA { get; set; }
public virtual string DS_ALA { get; set; }
public virtual long? ID_TABCAR { get; set; }
public virtual long? ID_CADRESP { get; set; }
public virtual decimal? CD_CENTRO_CUSTO { get; set; }
public virtual IEnumerable<TB_QUARTO> TB_QUARTO { get; set; }
}
public class TB_QUARTO
{
public TB_QUARTO()
{
this.TB_LEITO = new List<TB_LEITO>();
}
public virtual long ID_QUARTO { get; set; }
public virtual string CD_QUARTO { get; set; }
public virtual long ID_ALA { get; set; }
public virtual string DS_IMPRESSORA { get; set; }
public virtual string RAMAL { get; set; }
public virtual string FL_QUARTO_NUTRICAO { get; set; }
public virtual TB_ALA TB_ALA { get; set; }
public virtual IEnumerable<TB_LEITO> TB_LEITO { get; set; }
}
public class TB_LEITO
{
public virtual long ID_LEITO { get; set; }
public virtual string CD_LEITO { get; set; }
public virtual int SEQ_LEITO { get; set; }
public virtual long ID_QUARTO { get; set; }
public virtual long? ID_ESPECIALIDADE { get; set; }
public virtual TB_QUARTO TB_QUARTO { get; set; }
}
我的投影查询已启动,我无法在下面完成:
TB_ALA alaAlias = null;
TB_QUARTO quartoAlias = null;
var alas = session.QueryOver<TB_ALA>(() => alaAlias)
.Select(Projections.ProjectionList()
.Add(Projections.Property(() => alaAlias.ID_ALA).WithAlias(() => alaAlias.ID_ALA))
.Add(Projections.Property(() => alaAlias.CD_ALA).WithAlias(() => alaAlias.CD_ALA))
.Add(Projections.Property(() => alaAlias.DS_ALA).WithAlias(() => alaAlias.CD_ALA))
.Add(alaAlias.TB_QUARTO.Select(Projections.ProjectionList()
.Add(Projections.Property(() => quartoAlias.CD_QUARTO).WithAlias(() => quartoAlias.CD_QUARTO))
).Future<TB_ALA>())
).Future<TB_ALA>();
谢谢你们。