Asp.net NHibernate QueryOver-执行抓取和订购操作->;使用什么语法?
全部, 我有一个疑问:Asp.net NHibernate QueryOver-执行抓取和订购操作->;使用什么语法?,asp.net,.net,nhibernate,queryover,Asp.net,.net,Nhibernate,Queryover,全部, 我有一个疑问: _AddOrderBy(sortOptions, query) .Fetch(x => x.ImageType).Eager .Fetch(x => x.User).Eager .Fetch(x => x.Partner).Eager .Inner.JoinAlias(x => x.Partner, () => p)
_AddOrderBy(sortOptions, query)
.Fetch(x => x.ImageType).Eager
.Fetch(x => x.User).Eager
.Fetch(x => x.Partner).Eager
.Inner.JoinAlias(x => x.Partner, () => p).Fetch(x => x.Company).Eager
.Skip(startIndex)
.Take(pageSize)
.List<ImageRequest>();
在我的_AddOrderBy()中,我有以下内容:
Partner p = null;
Company comp = null;
order = query.Inner.JoinAlias(x => x.Partner, () => p)
.Inner.JoinAlias(x => x.Company, () => comp)
.OrderBy(x => comp.CompanyName);
但这给了我一个运行时异常,说明我在条件中有重复的键(指合作伙伴)。我可以看出,这与我急切的获取相冲突。
我的问题是:
如何添加“order by”以使其与我的获取一起工作。在查询中使用别名的好处在于,如果查询中已经发生了
Join
,则不必在\u AddOrderBy()
方法中再次使用Fetch
或JoinAlias
。您只需要声明具有相同名称的别名
因此,您的\u AddOrderBy()
可以如下所示:
Partner p = null;
Company comp = null;
order = query
.Inner.JoinAlias(x => p.Company, () => comp) // you can use p here if it was used in the query before
.OrderBy(x => comp.CompanyName);
这样做的原因是:如果将整个代码放在一个方法中,它显然会起作用。将其拆分为两个方法仍然有效,因为Partner p
不是对内存中对象的引用,而是一个Alias
,它被简单地转换为SQL查询的字符串
Partner p = null;
Company comp = null;
order = query
.Inner.JoinAlias(x => p.Company, () => comp) // you can use p here if it was used in the query before
.OrderBy(x => comp.CompanyName);