Mit NHibernate Einheiten:Linq to NHibernate: Summe der Beträge
Company
, Invoice
und InvoiceLine
die Price
eine Dezimalzahl Eigenschaft hat.
Eine Company
hat eine Sammlung von Typ Invoice
, und eine Invoice
hat eine Sammlung von Typ InvoiceLine
.
Wie kann ich die Summe aller Preise erhalten, die zu Rechnungszeilen gehören, die zu Rechnungen einer bestimmten Firma gehören, die durch id spezifiziert sind?
Ich habe versucht, die Abfrage wie folgt zu schreiben:
session
.Query<InvoiceLine>()
.Where(invoiceLine => invoiceLine.Invoice.Company.Id == companyId)
.Sum(invoiceLine => invoiceLine.Price);
aber es löst eine Ausnahme:
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)
innere Ausnahme:
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)
Dies könnte etwas mit dem zu tun haben summing leere Sammlungen, aber ich bin mir nicht sicher, wie man es repariert.
Dies ist fast die Lösung, bitte ändern Sie es in '.Summe (invoiceLine => (Dezimal?) RechnungLine.Price) ?? 0, also kann ich aufheben und akzeptieren. –