我使用NHibernate 4.0.0.4000和linq提供程序,我尝试编写这样的查询:
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();
但是我得到了HibernateException
组值是类型集合:BoughtServiceInformation
,其中包含ICollection<BoughtServicePayment> Payments
(在HasMany
处与BoughtServiceInformation
映射)。我做错了什么?
答案 0 :(得分:1)
如果删除分组,可以这样做:
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();
root将由Aministrator(SoldByAdministrator)提供。你甚至可以使用像x.Transactions.Where这样的Where子句(y =&gt; y.DSFS == 32424).Count()。
生成的sql将包含子查询,这在我的意见中是可以的。
如果您对性能不满意,那么您仍然可以使用QueryOver,它比LINQ更接近数据库操作。