Benutzer mit den meisten Antworten
Statistik in Entity Framework

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
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
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
-
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
-
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