none
Statistik in Entity Framework RRS feed

  • Frage

  • Hallo zusammen,

    ich bin dabei in WPF-C#-Entity Framework einzuarbeiten und bin dabei eine statistische Auswertung zu erstellen, die Datenbank funktioniert sonst ganz gut.

    Die Parameter "min, max, Anzahl" funktionieren, für max. 

    var maxSys = dbContext.tblData.Max(x => x.Werte);

    Nun habe ich ein Problem mit der Auswertung des Mittelwertes.

    var MWSys = dbContext.tblData.Average(x => x.Werte);

    Das Feld "Werte"  hat als Datentyp char(3)

    Fehlermeldungen sind:

    - "Der Typ "string" kann nicht implizit in "long?" konvertiert werden."

    - "Lambdaausdruck" kann nicht in den gewünschten Delegattyp konvertiert werden, weil einige der Rückgabetypen im Block nicht implizit in den Delegatrückgabetyp konvertiert werden können."

    Im Prinzip sollte es eigentlich funktionieren, aber scheinbar doch nicht.

    Habe schon jede Menge "Convert-Versuche"  unternommen, aber nichts funktioniert.

    Wo ist das Problem?

    Gruß

    hape

        


    Hans-Peter

    Samstag, 28. Mai 2022 12:45

Antworten

  • Hallo hape,

    die IMHO einzig sinnvolle Lösung ist, den richtigen Datentyp in der Quelle zu verwenden. Wenn Werte eine Zahl darstellen soll, macht es wenig bis gar keinen Sinn, einen char(3) Datentyp zu verwenden.

    Falls Du mit einer View oder einem SQL Statement und nicht direkt mit der Basistabelle arbeitest, kannst Du das ggfs. auch im SQL Statement der View über CONVERT( int, Werte ) AS WerteAlsInt oder so ähnlich machen, wenn es in der dahinterliegenden Tabelle nicht änderbar sein sollte.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    • Als Antwort markiert Hans-Peter- Sonntag, 29. Mai 2022 09:44
    Samstag, 28. Mai 2022 15:17
    Moderator

Alle Antworten

  • Hallo hape,

    versuch doch innerhalb einer Average-Methode den char[] zu konvertieren:

     var MWsys = dbContext.tblData.Average( x => {
    	var wert = new string(x.Werte); 
    	if(Double.TryParse(wert, out double result))
    		return result;
    		
    	return 0.0;
    	});

    Das Ergebnis ist aber nur solange korrekt wenn sich das char[] in eine Zahl wandeln lässt!
    Wenn nur Ganzzahlen vorhanden sind kannst du statt Double.TryParse() auch Int32.TryParse() schreiben.


    • Bearbeitet Alpecine Samstag, 28. Mai 2022 15:06
    Samstag, 28. Mai 2022 15:03
  • Hallo hape,

    die IMHO einzig sinnvolle Lösung ist, den richtigen Datentyp in der Quelle zu verwenden. Wenn Werte eine Zahl darstellen soll, macht es wenig bis gar keinen Sinn, einen char(3) Datentyp zu verwenden.

    Falls Du mit einer View oder einem SQL Statement und nicht direkt mit der Basistabelle arbeitest, kannst Du das ggfs. auch im SQL Statement der View über CONVERT( int, Werte ) AS WerteAlsInt oder so ähnlich machen, wenn es in der dahinterliegenden Tabelle nicht änderbar sein sollte.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    • Als Antwort markiert Hans-Peter- Sonntag, 29. Mai 2022 09:44
    Samstag, 28. Mai 2022 15:17
    Moderator
  • Hallo Alpecine,

    danke für die Hilfe, hat leider nicht funktioniert.

    Aufgrund der weiteren Fehlermeldungen habe ich dann die DB neu aufgesetzt und dabei meinen Fehler gefunden.

    Das mit der neuen DB hatte ich schon gemacht, allerdings nicht im Programm aktualisiert.

    Deshalb hatte ich immer wieder die Fehlermeldungen.

    Gruß

    Hans-Peter


    Hans-Peter

    Sonntag, 29. Mai 2022 09:44
  • Hallo Stefan,

    danke.

    Hatte das mit der Anpassung der DB schon gemacht, leider nicht im Programm aktualisiert und deshalb die Probleme.

    Gruß

    hape


    Hans-Peter

    Sonntag, 29. Mai 2022 09:46