ich bin gerade mal wieder am Verzweifeln ...
Folgende Abfrage möchte ich als eine Linq-Query schreiben:
SELECT d.artikelid AS ArtikelNr, d.Bezeichnung_deutsch AS Bezeichnung,b.Anzahl AS Kontraktmenge, Sum(e.Anzahl) AS AbgerufeneMenge, b.Einzelpreis, b.Bemerkung, c.Firma_Standort FROM tblkontrakt AS a JOIN tblkontrakteinzelheiten AS b ON a.KontraktNummer = b.KontraktNummer JOIN tblstandort AS c ON a.KundeID = c.StandortID JOIN tblartikel AS d ON b.ArtikelID = d.ArtikelID LEFT JOIN tblbestelleinzelheiten AS e ON e.KontraktNummer = a.KontraktNummer AND e.ArtikelID = d.ArtikelID JOIN tblbestellung f ON f.BestellID = e.BestellID WHERE a.kontraktnummer = ?contractnumber GROUP BY d.artikelid, c.Firma_Standort, e.kontraktnummer, d.Bezeichnung_deutsch, b.Anzahl, b.KontrakteinzelheitenID, a.LaufzeitBeginn, a.Laufzeitende, b.Einzelpreis, b.Bemerkung
So habe ich es versucht, allerdings gibt es zum einen Probleme mit den Joins ... und zum anderen würde ich ja auch nur zwei (Spalten)Werte zurück erhalten?
Simmte zumindest so der Ansatz? Oder benötige ich Subquerys? Stehe grad total auf dem Schlauch ...
var query = from k in ctx.tblkontrakt join kEinzel in ctx.tblkontrakteinzelheiten on k.KontraktNummer equals kEinzel.KontraktNummer join s in ctx.tblstandort on k.KundeID equals s.StandortID join bEinzel in ctx.tblbestelleinzelheiten on k.KontraktNummer equals bEinzel.KontraktNummer join a in ctx.tblartikel on kEinzel.ident equals a.ident join kArt in ctx.tblartikel_kunde_zuordnung on a.ident equals kArt.ident join b in ctx.tblbestellung on bEinzel.BestellID equals b.BestellID where kEinzel.ident == bEinzel.ArtikelNummer where k.KontraktNummer == sKontraktNr orderby kEinzel.Position select new Kontrakt { KontraktNummer = k.KontraktNummer, ArtikelNummer = kEinzel.ident, KundenArtikelNummer = kArt.ArtikelID_Kunde, ArtikelBezeichnung = a.Bezeichnung_deutsch, KontraktMenge = (int)kEinzel.Anzahl, Einzelpreis = (double)kEinzel.Einzelpreis, Bemerkung = kEinzel.Bemerkung, Position = (int)kEinzel.Position, LaufzeitBeginn = (DateTime)k.LaufzeitBeginn, LaufzeitEnde = (DateTime)k.Laufzeitende, Bestellmenge = (int)bEinzel.Anzahl, Kunde = s.Firma_Standort }; List<Kontrakt> listKontraktdaten = query.ToList(); var result = from k in listKontraktdaten group k by k.ArtikelNummer into g select new Kontrakt { ArtikelNummer = g.Key, AbgerufeneMenge = g.Sum(k => k.Bestellmenge) }; DataTable tbl = IEnumerableToDataTable.ToDataTable(query.ToList()); return tbl;
Comment