清单盒来自LinQ的选定项目

时间:2011-10-19 12:09:42

标签: linq asp.net-3.5 linq-to-objects

我正在编写以下代码行来提取checklistbox中的所选项目。

ListItemCollection ChecklistBoxCollection = new ListItemCollection();
            foreach (ListItem ChecklistBoxItem in ChecklistBox.Items)
                if (ChecklistBox.Selected)
                    ChecklistCollection.Add(ChecklistBox);

有没有办法在LinQ中获取这些项目?

2 个答案:

答案 0 :(得分:1)

没有自动转换为ListItemCollection,但您可以使用AddRange一次添加所选项目。我不确定这是一个很大的改进,可能会更慢,因为AddRange只接受一个数组。

ListItemCollection ChecklistBoxCollection = new ListItemCollection();
ChecklistBoxCollection.AddRange( checklistBox.Items
                                             .Cast<ListItem>()
                                             .Where( i => i.Selected )
                                             .ToArray() );

答案 1 :(得分:0)

我一直在使用这些扩展方法。

    public static List<string> GetCheckedValues(this CheckBoxList list)
    {
        var values = new List<string>();
        values.AddRange(from ListItem item in list.Items
                    where item.Selected
                    select item.Value);
        return values;
    }

    public static List<string> GetCheckedTexts(this CheckBoxList list)
    {
        var values = new List<string>();
        values.AddRange(from ListItem item in list.Items
                    where item.Selected
                    select item.Text);
        return values;
    }