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);