C# NHibernate GroupBy,使用select在关系集合上聚合

C# NHibernate GroupBy,使用select在关系集合上聚合,c#,nhibernate,C#,Nhibernate,我在linq provider中使用NHibernate 4.0.0.4000,并尝试编写这样的查询: var jsonResult = queryable .GroupBy(boughtInfo => new {boughtInfo.SoldByAdministrator.UserName}) .Select(group => new object[] {

我在linq provider中使用NHibernate 4.0.0.4000,并尝试编写这样的查询:

var jsonResult = queryable
                .GroupBy(boughtInfo => new {boughtInfo.SoldByAdministrator.UserName})
                .Select(group => new object[]
                {
                   group.Key,
                   group.Count(),
                   group.Sum(x => x.Payments.Count),
                   group.Sum(x => x.Payments.Sum(payment => payment.PaymentValue))
               })
               .Skip(itemsToSkipCount)
               .Take(itemsToTake)
               .ToList();
但是我得到了
hibernateeexception

  • 其他信息:无法识别查询源: ItemName=付款,ItemType=…BoughtServicePayment,表达式= 来自[x]中的付款。付款

组值是以下类型的集合:
BoughtServiceInformation
,其中包含
i收款付款
(在
BoughtServiceInformation
中映射为
HasMany
)。我做错了什么?

如果删除分组,可以这样做:

ISessionFactory factory = SessionFactory.CreateSessionFactory();
        ISession session = factory.OpenSession();

        var res = session.Query<Client>()
            .Select(
                x => new object[]{
                    x.Transactions.Count(),
                    x.Transactions.Sum( y => y.SomeAmount),
                }
            )
            .ToList();
ISessionFactory=SessionFactory.CreateSessionFactory();
ISession session=factory.OpenSession();
var res=session.Query()
.选择(
x=>新对象[]{
x、 Transactions.Count(),
x、 交易。总和(y=>y.SomeAmount),
}
)
.ToList();
根将由aminitrator(SoldByAdministrator)创建。您甚至可以使用Where子句,如x.Transactions.Where(y=>y.DSFS==32424.Count()

生成的sql将包含子查询,这在我的操作中是正常的


如果您对性能不满意,那么仍然可以使用QueryOver,这比LINQ更接近DB操作。

我建议您简化查询并检查它是否有效。删除Select but group.Key.UserName中的所有内容。然后再逐行添加,直到找到引起问题的行。问题是在x=>x上求和引起的。但是如何解决这个问题,为什么不起作用?通常情况下,我会按用户名分组、跳过、接受,然后使用ToList()定义查询并选择适当的数据-但使用纯GroupBy和Skip,我会得到一些列未被选择的异常。