使用Linq将ListBox项值转换为int

时间:2009-05-13 05:05:13

标签: c# asp.net linq listbox asp.net-3.5

我使用ListBox显示数据库中表的内容。每个列表框项都填充了Text属性设置为友好名称,Value属性设置为唯一ID列。数据库结构可能类似于以下内容:

CREATE TABLE GENERIC { FRIENDLY_NAME TEXT, ID INT }

我尝试了近一个小时,使用LINQ将列表框的项目转换为int []并最终失败。区分所选项目和未选择项目也很重要。以下是我最后写的内容:

System.Collections.Generic.LinkedList<int> 
            selected = new LinkedList<int>(), 
            notSelected = new LinkedList<int>();

        foreach (ListItem item in PhotoGalleryEdit_PhotoShoots.Items)
        {
            if (item.Selected)
                selected.AddFirst(Convert.ToInt32(item.Value));
            else
                notSelected.AddFirst(Convert.ToInt32(item.Value));
        }

 int []arraySelected = selected.ToArray();
 int []arrayNotSelected = notSelected.ToArray();

有人能说明这是如何在LINQ中完成的吗?

(我在C#中编写了所有代码,但用VB编写的任何答案都非常受欢迎)

2 个答案:

答案 0 :(得分:6)

根据你的描述,我能想到的最简单的是:

var qry = from ListItem item in listbox.Items
          select new {item.Selected, Value = Convert.ToInt32(item.Value)};

int[] arrSelected=qry.Where(x=>x.Selected).Select(x=>x.Value).ToArray();
int[] arrNotSelected=qry.Where(x=>!x.Selected).Select(x => x.Value).ToArray();

由于您使用的是AddFirst,因此某处可能还需要.Reverse() - 或之后使用Array.Reverse()

答案 1 :(得分:0)

int[] selected = (from item in PhotoGalleryEdit_PhotoShoots.SelectedItems.OfType<MyItem>() select item.Value).ToArray();

编辑:添加OfType调用以将所选项目添加到IEnumerable。

编辑II:对于未选择的项目:

int[] notSelected = (from item in PhotoGalleryEdit_PhotoShoots.Items.OfType<MyItem>() where !Array.Exists(selected, x => x == item.Value) select item.Value).ToArray();