Ce face Any, All, Count și Sum
Metodele de cuantificare Any și All verifică dacă cel puțin un element, respectiv toate elementele dintr-o secvență îndeplinesc o condiție. Ambele folosesc evaluarea cu scurtcircuitare (short-circuit evaluation): Any returnează true și oprește parcurgerea în secunda în care găsește primul element potrivit, iar All returnează false și se oprește imediat ce întâlnește primul element care încalcă regula.
Pentru calcule statistice și agregări, LINQ oferă metodele terminale Count (numărul de elemente care respectă un predicat), Sum (suma valorilor), Average (media aritmetică), Min și Max. Toate aceste metode parcurg secvența imediat și returnează o valoare scalară.
Parametri, metode și opțiuni
| Parametru / Metodă | Descriere |
|---|---|
source.Any() / source.Any(predicat) |
Returnează true dacă secvența conține cel puțin un element (sau cel puțin un element care respectă predicatul). |
source.All(predicat) |
Returnează true dacă toate elementele respectă predicatul (atenție: returnează true pe o colecție goală — vacuous truth). |
source.Count() / source.Count(predicat) |
Returnează numărul total de elemente sau numărul celor pentru care predicatul este true. |
source.Sum(x => x.Valoare) |
Calculează suma numerică a proprietății selectate (returnează 0 dacă secvența este goală). |
source.Average(x => x.Valoare) |
Calculează media aritmetică (aruncă InvalidOperationException dacă secvența este goală). |
source.Min(x => ...) / Max(x => ...) |
Returnează valoarea minimă, respectiv maximă din secvență. |
Exemple
Exemplul 1: Validarea unui coș de cumpărături cu Any și All
Verificăm rapid dacă există produse fără stoc în coș și dacă toate articolele au prețul validat.
var cos = new[]
{
new ArticolCos("Carte C# 12",Cantitate: 1, PretUnitar: 145.00m, InStoc: true),
new ArticolCos("Licență IDE", Cantitate: 2, PretUnitar: 450.00m, InStoc: true),
new ArticolCos("Hub USB-C", Cantitate: 1, PretUnitar: 180.00m, InStoc: true)
};
bool areProduse = cos.Any();
bool toateInStoc = cos.All(a => a.InStoc && a.Cantitate > 0);
bool existaProdusScump = cos.Any(a => a.PretUnitar >= 400m);
int totalBucati = cos.Sum(a => a.Cantitate);
decimal totalPlata = cos.Sum(a => a.Cantitate * a.PretUnitar);
Console.WriteLine($"Coș valid pentru comandă: {areProduse && toateInStoc}");
Console.WriteLine($"Conține produs >= 400 RON: {existaProdusScump}");
Console.WriteLine($"Total bucăți: {totalBucati} | Total de plată: {totalPlata:F2} RON");
record ArticolCos(string Nume, int Cantitate, decimal PretUnitar, bool InStoc);
Ieșire în consolă
Coș valid pentru comandă: True
Conține produs >= 400 RON: True
Total bucăți: 4 | Total de plată: 1225.00 RON
Exemplul 2: Statistici rapide cu Count(predicat), Min, Max și Average
Calculăm rata de promovare și statisticile notelor unui examen.
double[] note = [8.50, 4.20, 9.75, 6.80, 10.00, 7.40];
int promovati = note.Count(n => n >= 5.00);
double media = note.Average();
double notaMin = note.Min();
double notaMax = note.Max();
Console.WriteLine($"Promovați: {promovati}/{note.Length} | Media: {media:F2} | Interval: [{notaMin:F2} .. {notaMax:F2}]");
Ieșire în consolă
Promovați: 5/6 | Media: 7.78 | Interval: [4.20 .. 10.00]
Greșeli frecvente
- Folosirea
colectie.Count(x => conditie) > 0în loc decolectie.Any(x => conditie)— metodaCountparcurge întreaga colecție până la ultimul element pentru a număra toate potrivirile, în timp ceAnyse oprește la primul element găsit. - Apelarea
Average(),Min()sauMax()pe o secvență de tipuri valoare care poate fi goală (fără a verifica înainte cuAny()), ceea ce aruncăInvalidOperationException: Sequence contains no elements(spre deosebire deSum(), care returnează0pe o secvență goală).
Funcții și concepte înrudite
Enumerable.Where: Filtrează declarativ o secvență de elemente pe baza unui predicat lambda, cu execuție amânată (deferred execution).GroupBy: Grupează elementele unei secvențe după o cheie comună pentru a calcula statistici, sume și agregări pe categorii.FirstOrDefault / SingleOrDefault: Extrage un singur element dintr-o secvență (primul găsit sau unicul existent) ori returnează o valoare implicită când nu există potriviri.