LINQ:使用Lambdaexpression式获取CheckBoxList的所有选定值

考虑一个场景,你想要在<asp:CheckBoxList>检索所有选中checkbox的ListIEnumerable值。

这是当前的实现:

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

问题 :如何使用lambdaexpression式或lambda语法来改进此LINQ查询?

正在使用lambdaexpression式 – 它们只是隐藏在您使用C#的查询运算符中。

考虑到这一点:

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

获取编译到这个:

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

正如你所看到的,你已经使用了两个lambdaexpression式(它们是WhereSelect方法的参数),你甚至不知道它! 这个查询是好的,我不会改变它。

我将通过调用Cast<T>隐式来改进查询expression式:

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

当您指定范围variables的types时,编译器会为您插入对Cast<T>的调用。

除此之外,我完全同意安德鲁。

编辑:对于Goneale:

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