LINQ:使用Lambdaexpression式获取CheckBoxList的所有选定值
考虑一个场景,你想要在<asp:CheckBoxList>
检索所有选中checkbox的List
或IEnumerable
值。
这是当前的实现:
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式(它们是Where
和Select
方法的参数),你甚至不知道它! 这个查询是好的,我不会改变它。
我将通过调用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));