Berechnungsfunktion für verschiedene Tabellenspalten

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von VB1963.

    Berechnungsfunktion für verschiedene Tabellenspalten

    Ich möchte aus einer Tabelle verschiedene Spalten berechnen lassen und versuche das mit einer Funktion um zu setzen.
    Der Funktion übergibt man verschiedene Parameter zur Selektion der Daten und die Column zur Berechnung.

    VB.NET-Quellcode

    1. 'Funktionsaufruf
    2. Dim Result As Double = averageSample(10, 15, dts.basisProduktion.ResultXColumn)
    3. Public Function averageSample(ByVal V1 As Integer, ByVal V2 As Integer, ByVal Column As DataColumn) As Double
    4. Dim lst As List(Of Double)
    5. Select Case True
    6. Case Column Is dts.basisProduktion.Result1Column
    7. lst = (From rw In dts.basisProduktion Where rw.Wert1 = V1 AndAlso rw.Wert2 <> V2 Select rw.Result1).ToList
    8. Case Column Is dts.basisProduktion.Result2Column
    9. lst = (From rw In dts.basisProduktion Where rw.Wert1 = V1 AndAlso rw.Wert2 <> V2 Select rw.Result2).ToList
    10. Case Column Is dts.basisProduktion.Result3Column
    11. lst = (From rw In dts.basisProduktion Where rw.Wert1 = V1 AndAlso rw.Wert2 <> V2 Select rw.Result3).ToList
    12. '...
    13. Case Else
    14. Throw New ArgumentException("Die angegebene Column ist in der Tabelle nicht vorhanden!")
    15. End Select
    16. Return If(lst.Count > 0, lst.Average, 0.0#)
    17. End Function

    Gibt es hier eine bessere Möglichkeit...? :whistling:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VB1963“ ()

    ich würde einen richtigen Selector angeben lassen statt der Column

    VB.NET-Quellcode

    1. Public Function averageSample(ByVal V1 As Integer, ByVal V2 As Integer, ByVal selector as func(Of basisProduktionRow, Double)) As Double
    2. Dim lst = (From rw In dts.basisProduktion Where rw.Wert1 = V1 AndAlso rw.Wert2 <> V2 Select selector(rw)).ToList
    3. Return If(lst.Count > 0, lst.Average, 0.0#)
    4. End Function
    5. 'Funktionsaufruf
    6. Dim Result As Double = averageSample(10, 15, Function(rw)rw.Result1)