Hier sind einige Beispiele zur korrekten Verwendung der aggregate() Funktion bei Datenbankabfragen.
Die verwendeten Felder müssen durch die Verwendung von Select oder SelectField spezifiziert werden. Es gibt verschiedene Arten von Aggregaten, die wie folgt sind:
- eFieldAggregate.AVG // Durchschnittswert
- eFieldAggregate.COUNT // Zählen
- eFieldAggregate.MAX // Maximalwert
- eFieldAggregate.MIN // Minimalwert
- eFieldAggregate.SUM // Summe
Beispiel 1:
Bildung der Summe für Metrikdaten:
var dsMetricData = await database[cDatabaseObjectNames.MetricData]
.Where(cFieldName.MetricDefinition, metricDefinitionId)
.Select(cFieldName.Count, cFieldName.PayloadCount)
.Aggregate(cFieldName.Count, eFieldAggregate.SUM)
.Aggregate(cFieldName.PayloadCount, eFieldAggregate.SUM)
.QueryFirstOrDefault(session);
In diesem Beispiel werden die Summen von PayloadCount und Count berechnet:
// Summe von PayloadCount
dsMetricData[cFieldName.PayloadCount]
// Summe von Count
dsMetricData[cFieldName.Count]
Beispiel 2:
Bildung der Summe der Menge pro Lager für einen bestimmten Bestand. In diesem Fall wird auch ein weiteres Feld geladen, das nicht aggregiert wird.
var stock = await database[cDatabaseObjectNames.Stock]
.Where(cFieldName.IndividualStockOrderPosition, eFieldComparison.Equal, orderPositionGuid)
.Select(cFieldName.Storage, cFieldName.Quantity)
.Aggregate(cFieldName.Quantity, eFieldAggregate.SUM)
.Query(session);
Beispiel 3:
Bildung der Summe für Eingangsbelegpositionen:
var sumAmountFieldsInPositions = await database[cDatabaseObjectNames.IncomingDocumentPositions]
.Where(cFieldName.IncomingDocument, dsIncomingDocumentPosition[cFieldName.IncomingDocument].ValueGuid)
.Select(cFieldName.NetAmount, cFieldName.GrossAmount, cFieldName.Tax, cFieldName.GrossAmountClientCurrency, cFieldName.NetAmountClientCurrency, cFieldName.TaxAmountClientCurrency)
.Aggregate(cFieldName.NetAmount, eFieldAggregate.SUM)
.Aggregate(cFieldName.GrossAmount, eFieldAggregate.SUM)
.Aggregate(cFieldName.Tax, eFieldAggregate.SUM)
.Aggregate(cFieldName.GrossAmountClientCurrency, eFieldAggregate.SUM)
.Aggregate(cFieldName.NetAmountClientCurrency, eFieldAggregate.SUM)
.Aggregate(cFieldName.TaxAmountClientCurrency, eFieldAggregate.SUM)
.QueryFirstOrDefault(session);
In diesem Beispiel werden die Summen von NetAmount, GrossAmount, Tax, GrossAmountClientCurrency, NetAmountClientCurrency und TaxAmountClientCurrency berechnet.