NHibernate查询多个带有别名的Order By

NHibernate查询多个带有别名的Order By,nhibernate,sql-order-by,alias,queryover,Nhibernate,Sql Order By,Alias,Queryover,这是我的设想: public IEnumerable<ISuperMerc> getSuperMercTree(string IDLanguage) { SuperMercModel SMer = null; SuperMercDescriptionModel descrSMer = null; MercModel Merc = null; MercDescriptionModel descrMerc = null;

这是我的设想:

 public IEnumerable<ISuperMerc> getSuperMercTree(string IDLanguage)
 {

      SuperMercModel SMer = null;
      SuperMercDescriptionModel descrSMer = null;
      MercModel Merc = null;
      MercDescriptionModel descrMerc = null;

      var qOver = _HibSession.QueryOver<SuperMercModel>(() => SMer)                    
                .JoinAlias(() => SMer.DescriptionsSM, () => descrSMer,JoinType.LeftOuterJoin)
                    .Where(() => descrSMer.IDLanguage == IDLanguage)
                .JoinAlias(() => SMer.Merc, () => Merc,JoinType.LeftOuterJoin)
                    .JoinAlias(() => Merc.DescriptionsMer, () => descrMerc,JoinType.LeftOuterJoin)
                        .Where(() => descrMerc.IDLanguage == IDLanguage)    
                .OrderByAlias(() => SMer.ID).Asc
                .ThenByAlias(() => descrMerc.Description).Asc 
                .Future<SuperMercModel>();

      return qOver;

 }
public IEnumerable getSuperMercTree(字符串IDLanguage)
{
超级模型SMer=null;
SuperMercDescriptionModel descrSMer=null;
Merc模型Merc=null;
MercDescriptionModel descrMerc=null;
变量qOver=\u HibSession.QueryOver(()=>SMer)
.JoinAlias(()=>SMer.DescriptionsSM,()=>descrSMer,JoinType.LeftOuterJoin)
.Where(()=>descrSMer.IDLanguage==IDLanguage)
.JoinAlias(()=>SMer.Merc,()=>Merc,JoinType.LeftOuterJoin)
.JoinAlias(()=>Merc.DescriptionsMer,()=>descrMerc,JoinType.LeftOuterJoin)
.其中(()=>descrMerc.IDLanguage==IDLanguage)
.OrderByAlias(()=>SMer.ID).Asc
.ThenByAlias(()=>descrMerc.Description).Asc
.Future();
返回qOver;
}
我遇到了以下错误

无法解析属性:说明:模型

奇怪的是,描述字段在MercDescriptionModel类中,而不是SuperMercModel类中

我正在使用别名创建一个多连接和多订单查询。

我已经使用HQL解决了它 这是密码

public IEnumerable<ISuperMerc> getSuperMercTree(string IDLanguage)
{
    string hql = string.Empty;

     hql = "select SM from SuperMercModel SM"
                + " left join fetch SM.DescriptionsSM DSM"
                + " left join fetch SM.Merc ME"
                + " left join fetch ME.DescriptionsMer DME"
                + " where DSM.IDLanguage = :IDLanguage "
                + " and DME.IDLanguage = :IDLanguage "
                + " order by SM.ID asc, DME.Description asc";

            IQuery query = _HibSession
                .CreateQuery(hql)
                .SetString("IDLanguage ", IDLanguage );

            IList<SuperMercModel> result = query.List<SuperMercModel>();


            return result;
}
public IEnumerable getSuperMercTree(字符串IDLanguage)
{
string hql=string.Empty;
hql=“从模型SM中选择SM”
+“左连接获取SM.DescriptionSM DSM”
+“左加入取SM.Merc我”
+“left join fetch ME.DescriptionsMer DME”
+“其中DSM.IDLanguage=:IDLanguage”
+“和DME.IDLanguage=:IDLanguage”
+“由SM.ID asc、DME.Description asc订购”;
IQuery查询=\u HibSession
.CreateQuery(hql)
.SetString(“IDLanguage”,IDLanguage);
IList result=query.List();
返回结果;
}

我希望它对某人有所帮助。

如果您将
OrderByAlias
ThenByAlias
更改为常规
OrderBy
ThenBy
子句,那么您的原始代码应该可以在不使用SQL的情况下工作。我有同样的问题,这为我解决了。

为什么要使用旧方法?没有任何查询解决方案吗?是的,应该使用OrderBy,而不是OrderByAlias。如果不按别名排序,为什么方法的名称是“OrderByAlias”?