在 NHibernate QueryOver 中按和分组排序
本文关键字:排序 NHibernate QueryOver | 更新日期: 2023-09-27 18:28:04
var data = session.QueryOver<Product>()
.JoinAlias(qp => qp.FieldValues, () => qfv)
.UnderlyingCriteria.SetProjection(
Projections.Group(() => qfv.Product))
.AddOrder(Order.Asc("Price"))
.List<Product>();
我收到错误:
"价格不能出现在 OrderBy 子句中,因为它不包含在 AND 聚合函数或分组依据子句中"。
如您所见,我按"整个产品"分组,我无法按照错误所说的去做。我不能按价格分组(因为如果产品的价格相同,它们就会丢失(,并且出于消除某些产品的相同原因,我无法执行 MIN、MAX(价格(。我该如何绕过它?
Diego是对的
,按产品分组是按 Product.Id 分组。如果您按 Product.Price 分组,您不会错过任何产品,因为您也按 Product.Id 分组。
你可以这样做,但不要忘记你只有 Product.Id 和产品价格:
var data = session.QueryOver<Product>()
.JoinAlias(qp => qp.FieldValues, () => qfv)
.SelectList(list => list
.SelectGroup(product => product.Id)
.SelectGroup(product => product.Price))
.OrderBy(product => product.Price).Asc
.List<object[]>();
或者,您可以在没有任何分组的情况下执行此操作:(如果您只想按产品排序。价格(
var data = session.QueryOver<Product>()
.JoinAlias(qp => qp.FieldValues, () => qfv)
.OrderBy(product => product.Price).Asc
.List<Product>();
问题是这个假设是不正确的:
如您所见,我按"整个产品"分组
当您按Product
分组时,实际发生的是按产品 ID 分组。