NHibernate QueryOver - 执行 Fetches 和 OrderBy -> 使用什么语法?
NHibernate QueryOver - Doing Fetches and OrderBy -> What Syntax to use?
全部,
我有这样的查询:
_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 子句。我面临的挑战是如何创建一个 "order by" 来引用位于以下关联路径中的 属性(按 "CompanyName" 排序)而不与我的 Fetch()/内部连接冲突:
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 配合使用。
在 QueryOver 中使用别名的优点在于,如果 Join
发生,您不必在 _AddOrderBy()
方法中再次使用 Fetch
或 JoinAlias
已经在查询中。您只需声明同名的别名即可。
因此你的 _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 查询的字符串。
全部,
我有这样的查询:
_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 子句。我面临的挑战是如何创建一个 "order by" 来引用位于以下关联路径中的 属性(按 "CompanyName" 排序)而不与我的 Fetch()/内部连接冲突:
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 配合使用。
在 QueryOver 中使用别名的优点在于,如果 Join
发生,您不必在 _AddOrderBy()
方法中再次使用 Fetch
或 JoinAlias
已经在查询中。您只需声明同名的别名即可。
因此你的 _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 查询的字符串。