Wenn ich überprüfte Kontrollkästchen auf einer ASP.NET-Seite finden wollte, konnte ich die folgende LINQ-Abfrage verwenden.Rekursive Steuerelementsuche mit LINQ
var checkBoxes = this.Controls
.OfType<CheckBox>()
.TakeWhile<CheckBox>(cb => cb.Checked);
Das funktioniert gut, wenn die Kontrollkästchen in der aktuellen Steuer Sammlung verschachtelt sind, aber ich würde gerne wissen, wie die Suche zu erweitern, indem ich in die Steuer Kollektionen der Top-Level-Kontrollen zu bohren.
Die Frage ist hier gefragt wurde:
Finding controls that use a certain interface in ASP.NET
und erhielt nicht-LINQ Antworten, ich habe bereits meine eigene Version einer rekursiven Steuer Suche nach Typ und ID als Erweiterungsmethoden, aber ich fragte mich, wie einfach das ist in LINQ zu tun?
das funktioniert, aber wenn Sie Dritten Kontrollen und einem eigenen Server Kontrollen verwendet wurden, wie wir in meinem aktuellen Arbeitsplatz tun , können Sie ein paar Ebenen der Kontrolle nesting bekommen. Ich nehme an, eine ASP.NET-Seite ist nur ein Beispiel für ein allgemeineres Problem, nämlich das Aufspüren verschachtelter Sammlungen in Linq. – PhilGriffin
Ich habe gerade diese Technik schon einmal benutzt. (Wenn Sie wirklich süß werden wollen, können Sie dies als einen Ausdruck mit dem Y-Combinator tun!) BTW sollte nicht AllControls als Methode verwendet werden? – yfeldblum
@Phil: Ja, es kann ein paar Stufen runter gehen und ein wenig ineffizient sein - aber haben Sie einen Grund zu glauben, dass es ein * bedeutender * Flaschenhals sein wird? Tun Sie die einfachste Sache, die zuerst funktioniert, und optimieren Sie dann, wenn es wirklich ein Problem ist. (z. B. wird ein einzelner Datenbankanruf diese Kosten wahrscheinlich überfordern.) –