6 votes

Lambda équivalent à collection.Count(prédicat)

Quelle serait une expression lambda équivalente pour le code suivant

int[] numbers = { 3, 4, 5, 6, 7, 8 };
int count = numbers.Count(x => x > 5 == true); 

J'ai essayé celui-ci, mais ça n'a pas compilé:

var c = from number in numbers where number > 5 select numbers.Count;

celui-ci non plus n'a pas compilé:

var c = from number in numbers where number > 5 select new {numbers.Count};

7voto

ajawad987 Points 904

Vous êtes près, vous devez juste envelopper l'expression LINQ entre parenthèses comme ceci :

var c = (from number in numbers where number > 5 select number).Count();

3voto

Andomar Points 115404

Le style LINQ avec from et in est appelé "syntaxe de requête":

from row in table where row.col1 < 10 select row.col1

Il contient généralement moins d'expressions lambda que "la syntaxe de méthode":

table.rows.Where(r => r.col1 < 10).Select(r => r.col1)

Vous pouvez également les mélanger. Par exemple, cela crée un seul groupe pour toutes les lignes et calcule le nombre de lignes. Un appel de méthode comme FirstOrDefault() est nécessaire pour matérialiser la valeur:

int c = (
        from n in numbers 
        where n > 5 
        group n by 1 into g 
        select g.Count()
        ).FirstOrDefault();

2voto

mike z Points 14365

Ce dont vous parlez, c'est la syntaxe de requête, et toutes les méthodes LINQ n'ont pas d'équivalent en syntaxe de requête. L'expression la plus concise est numbers.Count(x => x > 5). À partir des docs:

Certaines opérations de requête, telles que Count ou Max, n'ont pas de clause d'expression de requête équivalente et doivent donc être exprimées comme un appel de méthode. La syntaxe de méthode peut être combinée avec la syntaxe de requête de différentes manières.

0voto

Terry H Points 195
int[] nombres = { 3, 4, 5, 6, 7, 8 };
var n = nombres.Where(x => x > 5).Count();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X