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”?