NHibernate QueryOver中的Order by和Group

Pau*_*usu 2 c# database nhibernate

var data = session.QueryOver<Product>()
                  .JoinAlias(qp => qp.FieldValues, () => qfv)
                  .UnderlyingCriteria.SetProjection(
                      Projections.Group(() => qfv.Product))
                  .AddOrder(Order.Asc("Price"))
                  .List<Product>();
Run Code Online (Sandbox Code Playgroud)

我收到错误:

"价格不能出现在OrderBy子句中,因为它既不包含在聚合函数中,也不包含在group by子句中".

如你所见,我按"整个产品"分组,我不能做错误所说的.我不能按价格分组(因为如果它们的价格相同,产品会丢失)而且由于消除某些产品的原因,我不能做MIN,MAX(价格).我该怎么办呢?

Ant*_*ton 7

Diego是对的,group by Product是Product.Id的一个组.如果您按Product.Price分组,您将不会错过任何产品,因为您已按Product.Id对其进行分组.

你可以做到这一点,但不要忘记你只有Product.Id和Product.Price:

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[]>();
Run Code Online (Sandbox Code Playgroud)

或者您可以通过以下方式执行此操作:(如果您只想按产品排序.价格)

var data = session.QueryOver<Product>()
                  .JoinAlias(qp => qp.FieldValues, () => qfv)
                  .OrderBy(product => product.Price).Asc
                  .List<Product>();
Run Code Online (Sandbox Code Playgroud)