Avec LINQ, obtenir nombre d'éléments qui satisfont à des critères de regroupement
Je vais probablement boucher la terminologie si j'essaie trop dur, de sorte qu'il sera plus facile de décrire via le code:
var fooGroup = fooList.GroupBy(x => x.SomeID);
//fooGroup is now of type IEnumerable<IGrouping<int, Foo>>
var someCount = fooGroup.Count(y => y.Where(f => f.Bar == "Bar"));
Le ci-dessus ne compilera pas à cause de cette erreur: "Impossible de convertir l'expression lambda de type délégué System.Func<System.Linq.IGrouping<int,Foo>,bool>
parce que certains types de retour dans le bloc ne sont pas implicitement convertible le délégué type de retour"
Je suppose que la réponse est assez simple, mais je n'arrive pas à envelopper ma tête autour de la façon de faire.
OriginalL'auteur Matt | 2013-02-13
Vous devez vous connecter pour publier un commentaire.
Ce que vous essayez de faire avec un groupe à ne pas faire beaucoup de sens. Je propose ce qui suit.
Si vous êtes à la recherche pour la façon dont beaucoup d'éléments ont
Bar == "Bar"
, puis le faire avant le groupe.Si vous êtes à la recherche pour compter les groupes qui contiennent un élément qui correspond aux mêmes critères.
OriginalL'auteur Khan
La
IEnumerable<IGrouping<int, Foo>>
vous obtenez par le groupement des.C'est un
IEnumerable
de groupes. Le groupe dispose d'un type de clé deint
, qui est parce que vous regroupées par l'int colonne id. Le groupement contient unIEnumerable
qui contient la liste des objets qui ont tous cette clé. Il est de typeFoo
.Alors c'est une simple requête. À partir du regroupement de vous trouver celles qui ont la clé (c'est à dire l'int id), puis sélectionnez le comte de groupes
IEnumerable
.Bien sûr, je suis en supposant que vous avez réellement besoin de le regroupement plus bas dans le code et vous avez juste besoin d'obtenir le nombre de par id pour une raison 🙂
Ils sont plus âgés et plus sages maintenant, veuillez utiliser:
.GroupBy(x->x.Key).ToDictionary(x => x.Key, x => x.Value)
, et sélectionner à partir.OriginalL'auteur h.alex
Essayez ceci:
Ou même plus propre
OriginalL'auteur Jens Kloster