none
Count von List in Linq RRS feed

  • Frage

  • Hallo allerseits,

    leider ist es mir nicht möglich mit Linq die Anzahl der Elemente in einer Auflistung abzufragen und brächte eure Unterstützung.

    Bsp:
    List<cPerson> person => hat 3 Einträge und jeder diese Einträge hat eine Auflistung von Rechnung

    person[0] hat 3 Rechnungen
    person[1] hat 2 Rechnungen
    person[2] hat 2 Rechnungen

    Jetzt möchte ich die Anzahl der Rechnungen abfragen.
    In diesem Fall sollte 7 rauskommen jedoch bekomme ich immer 3.
    Hier meine Versuche

    // Var 1
    person.Max(x => x.Invoice.Count());
    // Var 2
    person.Where(x => x.Invoice.All()).Count();
    // Var 3
    person.Select(x => x.Invoice).Count();

    Wäre für jede Hilfe sehr dankbar

    Lg
    GeRi

    Donnerstag, 2. Januar 2020 08:02

Antworten

Alle Antworten

  • Hi,

    Sum? Bspw.:

    person.Sum( f => f.Invoice.Count() );


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    • Als Antwort markiert geRe.LI Donnerstag, 2. Januar 2020 08:45
    Donnerstag, 2. Januar 2020 08:34
    Moderator
  • Super Danke für die schnelle Antwort ;-)

    Lg
    Geri

    Donnerstag, 2. Januar 2020 08:45
  • Hi,
    hier mal eine Konsolendemo, wie man die LinQ-Abfrage gestalten kann:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    
    namespace ConsoleApp1
    {
      class Program18
      {
        static void Main(string[] args)
        {
          try
          {
            (new Demo()).Execute();
          }
          catch (Exception ex) { Console.WriteLine(ex.ToString()); }
          Console.WriteLine("Continue enter key");
          Console.ReadKey();
        }
    
        internal class Demo
        {
          internal void Execute()
          {
            List<cPerson> person = new List<cPerson>();
            cPerson p1 = new cPerson();
            p1.Rechnungen.AddRange(new cRechnung[] { new cRechnung(), new cRechnung(), new cRechnung() });
            person.Add(p1);
            cPerson p2 = new cPerson();
            p2.Rechnungen.AddRange(new cRechnung[] { new cRechnung(), new cRechnung() });
            person.Add(p2);
            cPerson p3 = new cPerson();
            p3.Rechnungen.AddRange(new cRechnung[] { new cRechnung(), new cRechnung() });
            person.Add(p3);
            //
            var result = (from p in person
                          from r in p.Rechnungen
                          select r).Count();
            Console.WriteLine(result);
          }
        }
    
        internal class cPerson
        {
          internal List<cRechnung> Rechnungen = new List<cRechnung>();
        }
    
        internal class cRechnung { }
      }
    }


    --
    Best Regards / Viele Grüße
    Peter Fleischer (former MVP for Developer Technologies)
    Homepage, Tipps, Tricks


    Donnerstag, 2. Januar 2020 08:47