NHibernate-Projections.Property(关于别名为的分离条件)

NHibernate-Projections.Property(关于别名为的分离条件),nhibernate,nhibernate-projections,Nhibernate,Nhibernate Projections,我正在构建一个半复杂的报表查询(可能不是最好的方法,但在本期之前它工作得很好) 正如您所看到的,它使用的是我实体的第一个实例,而不是每个特定分离条件的实体 很抱歉问了这么长的问题,我不太确定在没有所有代码的情况下如何解释这个问题 如果需要,我可以粘贴更多的代码/SQL Paul我认为问题可能是您将子查询别名为“Sales”,但您已经在分离的条件中定义了别名“Sales”。Sql当然不区分大小写(我认为NHibernate别名不区分大小写?) 在任何情况下,我都会尝试更改投影列表中的别名,例如 v

我正在构建一个半复杂的报表查询(可能不是最好的方法,但在本期之前它工作得很好)

正如您所看到的,它使用的是我实体的第一个实例,而不是每个特定分离条件的实体

很抱歉问了这么长的问题,我不太确定在没有所有代码的情况下如何解释这个问题

如果需要,我可以粘贴更多的代码/SQL


Paul

我认为问题可能是您将子查询别名为“Sales”,但您已经在分离的条件中定义了别名“Sales”。Sql当然不区分大小写(我认为NHibernate别名不区分大小写?)

在任何情况下,我都会尝试更改投影列表中的别名,例如

var projections = Projections.ProjectionList()
   .Add(Projections.SubQuery(appts), "Appointments")
   .Add(Projections.SubQuery(sales), "MySales");

这样您就不会有两个潜在冲突的别名。

一点关于潜在客户、促销员、约会和销售的hbm信息可能会有所帮助。Crtieria查询已经过时(几乎)
// total appointments
var appts = DetachedCriteria.For<Appointment>("appt")
    .CreateAlias("Lead", "lead")
    .CreateAlias("lead.Promoter", "leadPromoter", JoinType.LeftOuterJoin)
    .Add(Restrictions.EqProperty("leadPromoter.Id", "promoter.Id"))
    .Add(Restrictions.Eq(
                        Projections.SqlFunction("day", NHibernateUtil.DateTime, Projections.Property("appt.AppointmentDate")), selectedDayOfWeek)
                    )
    .SetProjection(Projections.ProjectionList()
                                   .Add(Projections.CountDistinct("appt.Id"));

// total sales
var sales = DetachedCriteria.For<Appointment>("sales")
    .CreateAlias("Lead", "lead")
    .CreateAlias("Sale", "sale")
    .CreateAlias("lead.Promoter", "leadPromoter", JoinType.LeftOuterJoin)
    .Add(Restrictions.EqProperty("leadPromoter.Id", "promoter.Id"))
    .Add(Restrictions.Eq(
                        Projections.SqlFunction("day", NHibernateUtil.DateTime, Projections.Property("sales.AppointmentDate")), selectedDayOfWeek)
                    )
    .SetProjection(Projections.ProjectionList()
                                   .Add(Projections.CountDistinct("sales.Id"));
       and datepart(day, this_0_.AppointmentDate) = 0 /* @p4 */
       and datepart(day, this_0_.AppointmentDate) = 0 /* @p5 */
       and datepart(day, this_0_.AppointmentDate) = 0 /* @p6 */
       and datepart(day, this_0_.AppointmentDate) = 0 /* @p7 */
       and datepart(day, this_0_.AppointmentDate) = 0 /* @p8 */
       and datepart(day, this_0_.AppointmentDate) = 0 /* @p9 */
       and datepart(day, this_0_.AppointmentDate) = 0 /* @p10 */) as y0_,
var projections = Projections.ProjectionList()
   .Add(Projections.SubQuery(appts), "Appointments")
   .Add(Projections.SubQuery(sales), "MySales");