Linq to NHibernate:总和之和

Răz*_*nda 6 c# nhibernate linq-to-nhibernate

拥有NHibernate实体:

Company,Invoice并且InvoiceLine具有小数属性Price.

A Company具有类型的集合Invoice,并且Invoice具有类型的集合InvoiceLine.

如何获取属于发票行的所有价格的总和,这些发票行属于由id指定的某个公司的发票?

我试着写这样的查询:

session
    .Query<InvoiceLine>()
    .Where(invoiceLine => invoiceLine.Invoice.Company.Id == companyId)
    .Sum(invoiceLine => invoiceLine.Price);
Run Code Online (Sandbox Code Playgroud)

但它引发了一个例外:

NHibernate.Exceptions.GenericADOException
"Could not execute query[SQL: SQL not available]"

   at NHibernate.Impl.SessionImpl.List(IQueryExpression queryExpression, QueryParameters queryParameters, IList results)
   at NHibernate.Impl.AbstractSessionImpl.List(IQueryExpression queryExpression, QueryParameters parameters)
   at NHibernate.Impl.ExpressionQueryImpl.List()
   at NHibernate.Linq.DefaultQueryProvider.ExecuteQuery(NhLinqExpression nhLinqExpression, IQuery query, NhLinqExpression nhQuery)
   at NHibernate.Linq.DefaultQueryProvider.Execute(Expression expression)
   at NHibernate.Linq.DefaultQueryProvider.Execute[TResult](Expression expression)
   at System.Linq.Queryable.Sum[TSource](IQueryable`1 source, Expression`1 selector)
Run Code Online (Sandbox Code Playgroud)

内在异常:

System.ArgumentNullException
"Value cannot be null.\r\nParameter name: item"

   at System.ThrowHelper.IfNullAndNullsAreIllegalThenThrow[T](Object value, ExceptionArgument argName)
   at System.Collections.Generic.List`1.System.Collections.IList.Add(Object item)
   at NHibernate.Util.ArrayHelper.<>c__DisplayClass2.<AddAll>b__0()
   at NHibernate.Util.ArrayHelper.AddAll(IList to, IList from)
   at NHibernate.Engine.Query.HQLQueryPlan.PerformList(QueryParameters queryParameters, ISessionImplementor session, IList results)
   at NHibernate.Impl.SessionImpl.List(IQueryExpression queryExpression, QueryParameters queryParameters, IList results)
Run Code Online (Sandbox Code Playgroud)

这可能与汇总空集合有关,但我不知道如何解决它.

xan*_*tos 9

尝试将其转换Price为可空decimal...

.Sum(invoiceLine => (decimal?)invoiceLine.Price) ?? 0;
Run Code Online (Sandbox Code Playgroud)

结果显然是一个 decimal?