c# asp.net linq webforms

c# - LINQ: obtenga todos los valores seleccionados de un CheckBoxList usando una expresión Lambda



asp.net webforms (2)

Estás usando expresiones lambda, simplemente están ocultas por el uso de los operadores de consulta de C #.

Considera que esto:

IEnumerable<int> allChecked = (from item in chkBoxList.Items.Cast<ListItem>() where item.Selected select int.Parse(item.Value));

Se compila a esto:

IEnumerable<int> allChecked = chkBoxList.Items.Cast<ListItem>() .Where(i => i.Selected) .Select(i => int.Parse(i.Value));

Como puede ver, ya está usando dos expresiones lambda (son los parámetros de los métodos Where y Select ) ¡y ni siquiera lo sabía! Esta consulta está bien y no la cambiaría en absoluto.

Considere un escenario en el que desee recuperar una List o IEnumerable de los valores de todas las casillas de verificación seleccionadas en un <asp:CheckBoxList> .

Aquí está la implementación actual:

IEnumerable<int> allChecked = (from item in chkBoxList.Items.Cast<ListItem>() where item.Selected select int.Parse(item.Value));

Pregunta : ¿Cómo mejoraría esta consulta LINQ utilizando una expresión lambda o una sintaxis lambda?


Mejoraría la expresión de consulta haciendo que la llamada a Cast<T> implícita:

IEnumerable<int> allChecked = from ListItem item in chkBoxList.Items where item.Selected select int.Parse(item.Value);

Cuando especifica el tipo de una variable de rango, el compilador inserta una llamada a Cast<T> por usted.

Aparte de eso, estoy totalmente de acuerdo con Andrew.

EDITAR: Para GONeale:

IEnumerable<int> allChecked = chkBoxList.Items .Cast<ListItem>() .Where(item => item.Selected) .Select(item => int.Parse(item.Value));