Entwickler-Ecke
Datenbanken (inkl. ADO.NET) - Lambda sum problem
julia24 - Mo 09.02.15 22:06
Titel: Lambda sum problem
C#-Quelltext
1: 2: 3: 4:
| var summe1 = from l in db.Lg7s && new int[]{0,40}.Contains(l.CREATE) && l.ANSWERING>0 select (l.TALKINGTIME + l.ONHOLDTIME + l.ACTIONTIME + l.UPTIME)).Sum(i => i); |
Ich würde das gerne in diese Abfrage einbauen. Bei Summe1 habe ich den versuch gemacht. Leider funktioniert das so nicht.(also schon alleine die Syntax nicht) Kann mir jemand helfen?
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var pilotgroup = (from l in db.Lg7 where c.IdClasse == "7" select l) .GroupBy(l => l.NUMBER) .Select(group => new { T4Number = group.Count(lg => lg.TALKINGTIME == 0),
Summe1 = group.Select(new {l.TALKINGTIME + l.ONHOLDTIME + l.ACTIONTIME + l.UPTIME}).Sum(lg => new int[]{38,40}.Contains(lg.CAUSE) && lg.ANSWERING>0) } |
Moderiert von
Th69: Code- durch C#-Tags ersetzt
Stundenplan - Di 10.02.15 11:21
Kleiner Tipp, C#-Codetags gehen mit
[cs][/cs]. ;-)
Zitat: |
C#-Quelltext 1: 2: 3: 4:
| var summe1 = from l in db.Lg7s && new int[]{0,40}.Contains(l.REATE) && l.ANSWERING>0 select (l.TALKINGTIME + l.ONHOLDTIME + l.ACTIONTIME + l.UPTIME)).Sum(i => i); |
|
Bei den &&s fehlt was, und zwar das
where:
C#-Quelltext
1:
| from l in db.Lg7s where new int[]{...}.Contains(...) && l.ANSWERING > 0 |
Außerdem macht das .Sum(i => i) wenig Sinn, wenn du in der select-Klammer schon Zeiten aufsummierst.
Bei
group.Select(new {l.TALKINGTIME + l.ONHOLDTIME + l.ACTIONTIME + l.UPTIME}) muss, wie beim oberen Select, ein Lambda mit Argument übergeben werden, also z.B.
.Select(group => ...). Allerdings macht ein new {} wenig Sinn, wenn das einzige Element des on the fly erstellten Objektes eine Summe ist. Wie du das dann aber mit .Sum weiterverarbeiten willst, kann ich leider nur erraten. Vllt. kannst uns mal nen Abriss geben, was du genau machen willst.
julia24 - Di 10.02.15 12:49
Also eigentlich will ich folgendes Statment (welches einzeln auch schon funktioniert hat),
in ein Statement mit Lambda umschreiben.
C#-Quelltext
1: 2: 3: 4:
| var summe1 = from l in db.Lg7s where new int[]{0,40}.Contains(l.REATE) && l.ANSWERING>0 select (l.TALKINGTIME + l.ONHOLDTIME + l.ACTIONTIME + l.UPTIME)).Sum(i => i); |
Hier ist mein versuch:
C#-Quelltext
1:
| Summe1 =group.Where(lg => new int[]{38,40}.Contains(lg.CAUSE) && lg.ANSWERING>0).Select(lg => new {DurationOfCallProcessing = lg.TALKINGTIME + lg.EN_ ONHOLDTIME + lg.ACTIONTIME + lg.UPTIME }).Sum(), |
Leider zeigt er mir aber an, dass die Sum hier nicht zulässig ist.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| Am ende soll es so aussehen. var pilotgroup = (from l in db.Lg7 where c.IdClasse == "7" select l) .GroupBy(l => l.NUMBER) .Select(group => new {
T4Number = group.Count(lg => lg.TALKINGTIME == 0),
Summe1 = group.Select(new {l.TALKINGTIME + l.ONHOLDTIME + l.ACTIONTIME + l.UPTIME}).Sum(lg => new int[]{38,40}.Contains(lg.CAUSE) && lg.ANSWERING>0) } |
Ich weiß nicht, wie ich diese Addition einbaue.
Normalerweise könnte ich ja schreiben
C#-Quelltext
1: 2:
| Summe1 = group.Sum(lg => new int[]{38,40}.Contains(lg.CAUSE) && lg.ANSWERING>0) } |
Was ist aber jetzte, wenn ich die Summe der 4 Spalten addiert haben will.
julia24 - Di 10.02.15 13:03
Ich hab die Lösung denk ich gefunden:
C#-Quelltext
1: 2: 3:
| T4Number = group .Where(lg => new int[]{38,40}.Contains(lg.CAUSE) && lg.ANSWERING>0) .Sum(lg => lg.EN_ TALKINGTIME + lg.EN_ ONHOLDTIME + lg.EN_ ACTIONTIME + lg.UPTIME); |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!