Munixo Support Forum - Kostenfreier Support für Munixo Anwender und Entwicklungspartner
0 Punkte
Könnte ein (oder mehrere) Beispiele genannt werden zur korrekten Verwendung der aggregate() function bei Datenbankabfragen? Wie verhält sich das im Vergleich zum SQL "Group By"?

_database.aggregate.Query()

Kann das mit QueryFirstOrDefault verwendet werden? Wie müssen die anderen Felder in Select angegeben werden?

Vielen Dank
von (1.2k Punkte)

1 Antwort

+1 Punkt

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.

von (740 Punkte)