Laden...

Suche Linq-Version von SQL-Query mit SUM() um Datensätze zu zählen

Erstellt von Sclot vor 13 Jahren Letzter Beitrag vor 13 Jahren 978 Views
S
Sclot Themenstarter:in
324 Beiträge seit 2007
vor 13 Jahren
Suche Linq-Version von SQL-Query mit SUM() um Datensätze zu zählen

verwendetes Datenbanksystem: <MySQL> / Linq2Mysql (dbLinq2007)

Ich habe folgenden SQL-Query:


SELECT 
    s.zustaendiger_mitarbeiter_id AS id, 
    Concat(ma.vorname,ma.nachname)AS name,
    SUM(s.primaer_id!=0) AS gesamt,
    SUM(s.gelesen=1) AS gelesen, 
    SUM(s.gelesen=0) AS ungelesen 
FROM 
    supportfaelle AS s, 
    mitarbeiter AS ma
WHERE 
    s.zustaendiger_mitarbeiter_id = ma.primaer_id
GROUP BY 
    s.zustaendiger_mitarbeiter_id

Das funktioniert so recht gut.
Erstellt dann eine Tabelle mit einer übersicht wie diese:


|id |name |gesamt|gelesen|ungelesen|
+---+-----+------+-------+---------+
|1  |mi1  |215   |0      |215      |
|2  |mi2  |84    |3      |81       |
|3  |mi3  |138   |0      |138      |
|4  |mi4  |109   |0      |109      |
|5  |mi6  |179   |0      |179      |
|6  |mi6  |66    |0      |66       |

Nur... wie macht man sowas tolles jetz in Linq? 😕

3.511 Beiträge seit 2005
vor 13 Jahren

Hallo,

ist jetzt aus dem Bauch hereus geschossen 😃


var result = from s in supportfaelle
  join ma in mitarbeiter on s.zustaendiger_mitarbeiter_id equals ma.primaer_id
  where s.primaer_id != 0 && s.gelesen == 1 && s.ungelesen == 0
  group g by s.zustaendiger_mitarbeiter_id
  select new { 
    id = s.zustaendiger_mitarbeiter_id,
    name = ma.vorname + ', ' ma.nachname,
    g.Sum(p => p.primaer_id),
    g.Sum(p => p.gelesen)
    g.Sum(p => p.ungelesen) }

Wie gesagt, ist einfach jetzt runtergetippt. Aber so in etwa würde es aussehen. Ich denke jetzt mal, dass das so nicht auf Anhieb funktioniert.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

6.911 Beiträge seit 2009
vor 13 Jahren

Hallo,

Ich denke jetzt mal, dass das so nicht auf Anhieb funktioniert.

Zumindest fehlt beim group das into 😉

Bezüglich join ist noch zu prüfen ob das nicht über das Mapping bereits vorhanden ist.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

S
Sclot Themenstarter:in
324 Beiträge seit 2007
vor 13 Jahren

Sind noch andere kleine fehler drin..
z.b. das ', ' nicht geht, weil ein char nur ein zeichen kann 😄

...aber bin noch am basteln

mhm...
Einer ne Idee, warum ich weder "s" - noch "ma" im Select zur verfügung habe?
Hab lediglich das "g" von der gruppierung zur verfügung, kann da aber keine felder ansprechen.

So sieht das inzwischen bei mir aus:


			var res_gruppen = from s in DB.supportfaelle 
								join ma in DB.mitarbeiter 
								on s.zustaendigermitarbeiterid equals ma.primaerid
								where s.primaerid != 0 && s.gelesen == 1 && s.gelesen == 0
								group s by s.zustaendigermitarbeiterid into g 
								select new 
								{
									id = s.zustaendigermitarbeiterid,
									name = ma.vorname + ", "+ ma.nachname,
									a = g.Sum(p => p.primaer_id),
									b = g.Sum(p => p.gelesen),
									c = g.Sum(p => p.ungelesen) 
								}

6.911 Beiträge seit 2009
vor 13 Jahren

Hallo,

Einer ne Idee, warum ich weder "s" - noch "ma" im Select zur verfügung habe?
Hab lediglich das "g" von der gruppierung zur verfügung, kann da aber keine felder ansprechen.

Weil das im g steckt. Du kannst dir das so vorstellen dass nach der Gruppierung mit einer neuen Abfrage begonnen wird und von daher kann auf die "alten" Variablen nicht mehr zugegriffen werden. D.h. die Gruppierung muss entsprechend erfolgen.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"