C# NHibernate GroupBy,使用select在关系集合上聚合
我在linq provider中使用NHibernate 4.0.0.4000,并尝试编写这样的查询: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[] {
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,我会得到一些列未被选择的异常。