SEL to LINQ
-
Hallo,
irgendwie schaffe ich es nicht, das SQL geraffel in LINQ umzuwundeln. Hat jemand eine Idee?
SELECT MIN(Anzahl),
MAX(Anzahl),
CAST(SUM(Anzahl) AS decimal(10,2))/CAST(COUNT(Anzahl) AS decimal(10,2))
FROM(SELECT CAST("Objekt"."Eingangszeit" AS DATE) AS Datum,
COUNT("Objekt".id) AS Anzahl
FROM "Objekt"
WHERE "Objekt"."Ein_Aus_Flag" = 1
GROUP BY Datum)
-
Warum willst du es umwandeln? Speicher es doch als View und ruf die ab, geht viel schneller als Linq.
-
from r in ( from u in Objekt where u.Ein_Aus_Flag == 1 group u by u.Eingangszeit into innerGroup select new { Datum = innerGroup.Key, Anzahl = innerGroup.Count() }) group r by 0 into outerGroup select new { Min = outerGroup.Min(x => x.Anzahl), Max = outerGroup.Max(x => x.Anzahl), Average = outerGroup.Average(x => x.Anzahl) }
Da ich es nicht ausprobieren kann und zu faul bin, mir einen Testfall zu erstellen ... keine Garantie
Ich weiss nicht mal, ob es kompiliert. Aber so oder so ähnlich sollte es wohl gehen. Die Frage von Firefighter sollte aber im Raum stehen bleiben. Ich weiss auch nicht, wie gut optimiert sowas werden würde.
Grüssli
-
Zumal man auch nicht 100% Sicher gehen kann ob der LINQ-Baum exakt in das SQL uebersetzt wird was du vorher hattest.
-
Hey, besten Dank für deine Antwort. Klappt soweit sehr gut. Allerding muss das noch ein wenig modifiziert werden damit die Abfrage nicht auf den TIMESTAMP sondern auf den Teil DATE des TIMESTAMP's geht. So ist es für mich wunderbar:
var temp = from r in (from u in db.Objekt where u.Ein_Aus_Flag == 1 group u by EntityFunctions.TruncateTime(u.Eingangszeit) into innerGroup select new { Datum = innerGroup.Key, Anzahl = innerGroup.Count() }) group r by 0 into outerGroup select new { min = outerGroup.Min(x => x.Anzahl), max = outerGroup.Max(x => x.Anzahl), avg = outerGroup.Average(x => x.Anzahl) };
Und dann noch zu den anderen Antworten. Also eine View ist mir natürlich auch in den Sinn gekommen und wäre mir auch lieber gewesen. Jedoch arbeite ich mit einer Firebird Datenbank und der Adapter für .NET schafft es nicht, eine View zu importieren da eine eindeutige ID fehlt die der MSSQL jedoch mitliefert. Workarounds wie "PK_GEN" greifen leider auch nicht und ich scheine auch nicht der einzige zu sein, der dieses Problem hat:-(
Das aus dem LINQ nicht direkt das kommt was ich habe ist mir schon klar;-) Ich sehe jedoch gerade, das LINQ mal eben das 10fache(!) an Länge erzeugt...Mit dem selben Ergebnis. Schon ganz schön wuchtig das Ding:-(
-
Und ne Stored-Procedure?