NHibernate QueryOver - 做Fetches和OrderBy - >使用什么语法?

问题描述 投票:1回答:1

所有,

我有一个查询:

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

在上面的QueryOver中,我调用了_AddOrderBy()方法,该方法添加了order by子句。我面临的挑战是如何创建一个引用属性(按“CompanyName”排序)的“order by”,它位于以下关联路径中,而不与我的Fetch()/ Inner连接冲突:

ImageRequest.Partner.Company.CompanyName

在我的_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”,以便它与我的Fetching一起使用。

asp.net .net nhibernate queryover
1个回答
1
投票

在QueryOver中使用Alias的好处是,如果Fetch已在查询中发生,则不必再次在JoinAlias方法中使用_AddOrderBy()Join。您只需要声明具有相同名称的别名。

因此,您的_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查询的字符串。

© www.soinside.com 2019 - 2024. All rights reserved.