Having NHibernate kişiler toplamı.Linq:</p> <p><code>Company</code>, <code>Invoice</code> ve ondalık özelliği <code>Price</code> sahiptir <code>InvoiceLine</code>: toplamlar
Company
, Invoice
türünde bir koleksiyona sahiptir ve Invoice
, InvoiceLine
türünde bir koleksiyona sahiptir.
Belli bir şirketin faturalarına ait fatura satırlarına ait tüm fiyatların toplamını, kimliğin belirttiği belirli bir şirketten nasıl edinebilirim?
böyle sorguyu yazmaya çalıştı:session
.Query<InvoiceLine>()
.Where(invoiceLine => invoiceLine.Invoice.Company.Id == companyId)
.Sum(invoiceLine => invoiceLine.Price);
ama bir istisna atar:
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)
iç istisna:
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)
Bu bir ilgisi olabilir boş koleksiyonları toplamak ama nasıl tamir edeceğimi bilmiyorum.
Bu hemen hemen çözümdür, lütfen değiştirin. Sum (invoiceLine => (decimal?) InvoiceLine.Price) ?? 0 'yı kabul edip kabul edebilirim. –