Récursive de contrôle de la recherche avec LINQ
Si je voulais trouver coché les cases à cocher sur une ASP.NET la page que je pouvais utiliser la suite d'une requête LINQ.
var checkBoxes = this.Controls
.OfType<CheckBox>()
.TakeWhile<CheckBox>(cb => cb.Checked);
Qui fonctionne très bien si les cases sont imbriqués dans le contrôle en cours de collecte, mais je voudrais savoir comment étendre la recherche par le forage vers le bas dans le contrôle des collections de haut-niveau des contrôles.
La question a été posée ici:
Trouver contrôles qui utilisent une certaine interface dans ASP.NET
Et reçus non-LINQ réponses, j'ai déjà ma propre version d'un circuit de contrôle de la recherche sur le type et l'ID que les méthodes d'extension, mais je me demandais quel point c'est facile à faire dans LINQ?
Vous devez vous connecter pour publier un commentaire.
Prendre le type et l'ID de la vérification de la récursivité, alors juste une "donnez-moi tous les contrôles, de manière récursive" la méthode, par exemple
C'est quelque peu inefficace (en termes de création de beaucoup d'itérateurs) mais je doute que vous aurez un très profondeur de l'arbre.
Vous pouvez ensuite écrire votre requête initiale comme:
(EDIT: Changé AllControls à GetAllControls et l'utiliser correctement en tant que méthode.)
Descendants
LINQ fonction récursive de contrôle de sélection. (Peut-être la mise à jour de cette question/réponse?)Maintenant basée sur la fonction ci-dessus, nous pouvons faire quelque chose comme ceci:
Ma suggestion de faire de la
AllControls
récursive est:La deuxième
foreach
un peu bizarre, mais c'est le seul moyen que je connaisse pour "aplatir" l'appel récursif.