Si je voulais rechercher les cases à cocher sur une page ASP.NET, je pourrais utiliser la requête LINQ suivante.Recherche de contrôle récursive avec LINQ
var checkBoxes = this.Controls
.OfType<CheckBox>()
.TakeWhile<CheckBox>(cb => cb.Checked);
Cela fonctionne très bien si les cases à cocher sont imbriquées dans la collection de contrôle actuel, mais je voudrais savoir comment étendre la recherche en perçant dans les collections de contrôle des commandes de haut niveau.
La question a été posée ici:
Finding controls that use a certain interface in ASP.NET
et a reçu des réponses non-LINQ, je l'ai déjà ma propre version d'une recherche de contrôle récursif sur le type et l'ID en tant que méthodes d'extension, mais je me demandais comment est-ce facile à faire dans LINQ?
Cela fonctionne, mais si vous utilisez des contrôles tiers et vos propres contrôles serveur comme nous le faisons dans mon lieu de travail actuel , vous pouvez obtenir quelques bons niveaux d'imbrication de contrôle. Je suppose qu'une page ASP.NET est juste un exemple d'un problème plus général, celui de percer des collections imbriquées dans Linq. – PhilGriffin
J'ai déjà utilisé cette technique auparavant. (Si vous voulez être vraiment gentil, vous pourriez le faire comme une expression avec le Y Combinator!) BTW ne devrait-on pas utiliser AllControls comme méthode? – yfeldblum
@Phil: Oui, ça peut descendre à quelques niveaux et être un peu inefficace - mais avez-vous des raisons de croire que ce sera un goulot d'étranglement * significatif *? Faites la chose la plus simple qui fonctionne en premier, puis optimisez si c'est vraiment un problème. (Par exemple, un seul appel à une base de données est susceptible de surcharger ce coût.) –