Si quisiera encontrar casillas de verificación marcadas en una página ASP.NET, podría usar la siguiente consulta LINQ.Búsqueda de control recursivo con LINQ
var checkBoxes = this.Controls
.OfType<CheckBox>()
.TakeWhile<CheckBox>(cb => cb.Checked);
que funciona bien si las casillas de verificación están anidados en la colección de controles actual, pero me gustaría saber cómo ampliar la búsqueda mediante la profundización en las colecciones de control de los controles de nivel superior.
La pregunta fue hecha aquí:
Finding controls that use a certain interface in ASP.NET
y recibió respuestas no LINQ, ya tengo mi propia versión de una búsqueda de control recursivo del tipo y la identificación que los métodos de extensión, pero me preguntaba cómo fácil esto es hacer en LINQ?
que funciona, pero si estuviera usando los controles de terceros y sus propios controles de servidor como lo hacemos en mi lugar de trabajo actual , puedes obtener unos buenos niveles de anidación de control. Supongo que una página ASP.NET es solo un ejemplo de un problema más general, el de profundizar en colecciones anidadas en Linq. – PhilGriffin
He usado solo esta técnica antes. (Si quieres ser realmente dulce, ¡podrías hacer esto como una expresión con el Y Combinator!) ¿Por cierto, no se debe usar AllControls como método? – yfeldblum
@Phil: Sí, puede bajar algunos niveles y ser un poco ineficiente, pero ¿tiene alguna razón para creer que será un * cuello de botella * significativo? Haga lo más simple que funciona primero, y luego optimice si realmente es un problema. (Por ejemplo, una sola llamada a una base de datos puede abrumar este costo). –