在 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(价格(。我该如何绕过它?

在 NHibernate QueryOver 中按和分组排序

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 分组。