SELECT Problem bei LINQ, Lambda



  • Hallo,

    meine Abfrage läuft problemlos und auch richtig, nur wie schaffe ich es, dass in meiner Liste am Ende auch tatsächlich die richtige Bezeichnung angezeigt wird?

    Momentan steht System.Linq.Enumerable+WhereSelectEnumerableIterator2[Projektname.Classes.Verkauf,System.String]` drin.
    In der Abfrage, zum Befüllen der Liste, steht der Wert auf jeden Fall mit drin.

    public static DataTable PivotVerkaufszahlen(string sJahr)
            {
                    IEnumerable<Verkauf> lstVerkauft = VerkaufsuebersichtEinzelbestellungenListe();
    
                    var query = lstVerkauft
                        .Where(y => y.Lieferdatum.ToString().Contains(sJahr))
                        .GroupBy(c => c.ArtikelNr)
                        .Select(g => new
                        {
                            Ident = g.Key,
                            Bezeichnung = g.Select(b => b.ArtikelName),
                            Januar = g.Where(c => c.Lieferdatum.Month == 1).Sum(c => c.Anzahl),
                            Februar = g.Where(c => c.Lieferdatum.Month == 2).Sum(c => c.Anzahl),
                            March = g.Where(c => c.Lieferdatum.Month == 3).Sum(c => c.Anzahl),
                            April = g.Where(c => c.Lieferdatum.Month == 4).Sum(c => c.Anzahl),
                            Mai = g.Where(c => c.Lieferdatum.Month == 5).Sum(c => c.Anzahl),
                            Juni = g.Where(c => c.Lieferdatum.Month == 6).Sum(c => c.Anzahl),
                            Juli = g.Where(c => c.Lieferdatum.Month == 7).Sum(c => c.Anzahl),
                            August = g.Where(c => c.Lieferdatum.Month == 8).Sum(c => c.Anzahl),
                            September = g.Where(c => c.Lieferdatum.Month == 9).Sum(c => c.Anzahl),
                            Oktober = g.Where(c => c.Lieferdatum.Month == 10).Sum(c => c.Anzahl),
                            November = g.Where(c => c.Lieferdatum.Month == 11).Sum(c => c.Anzahl),
                            Dezmeber = g.Where(c => c.Lieferdatum.Month == 12).Sum(c => c.Anzahl)
                        });
    
                    return = IEnumerableToDataTable.ToDataTable(query.ToList());
            }
    


  • Unter der Annahme, dass ArtikelNr und ArtikelName immer paarweise zusammengehören und es z.B. keine Nr mit mehreren Namen oder umgekehrt gibt:

    Entweder lässt Du Dir einfach den ersten pro Gruppe zurückgeben:

    Bezeichnung = g.First().ArtikelName
    

    oder Du gruppierst direkt "richtig" und sammelst in den Keys alle Infos die unveränderlich sind in einer Gruppe:

    GroupBy(c => new { ArtikelNrKey = c.ArtikelNR, ArtikelBezeichungKey = c.ArtikelName})
    .Select( g => new 
    {
      Ident = g.Key.ArtikelNrKey,
      Bezeichnung = g.Key.ArtikelBezeichnungKey,
      ...
    }
    


  • Vielen Dank! 👍


Anmelden zum Antworten