将LINQ表达式用于自定义数据类型

时间:2011-03-05 08:30:16

标签: c# xml linq

在我的“设置”对话框中,我有两个列表框,如下所示:

+------+   +---------+
|File  |   |Extension|
|type  |   |         |
|      |   |         |
+------+   +---------+

我有一些需要从XML加载的数据,所以我为此创建了一个类:

public class XmlConfig
{
    public List<config> con = new List<config>();
    public XmlConfig(string PathToSettings)
    {
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(PathToSettings);
        XmlNodeList xmlNodes = xmlDoc.GetElementsByTagName("ext");
        foreach (XmlNode xmlnode in xmlNodes)                          
            con.Add(new config()
            {
                FolderName = xmlnode.Attributes["File"].Value,
                Extensions = xmlnode.InnerText.Split(',').ToList<string>()
            });
    }
}

public struct config
{
    public string FolderName;
    public List<string> Extensions;
}

现在我想用xml文件中的所有值填充文件夹列表,这是正确发生的但问题是我希望它像是在单击文件类型列表项时应显示相应的扩展名并且我不知道该怎么做。有人建议使用linq,但因为我是c#的新手,我不知道它是什么。

2 个答案:

答案 0 :(得分:1)

您必须订阅fileTypes ListView事件SelectedValueChanged,然后在该事件的处理程序中过滤Extensions集合并绑定到另一个ListBox

    private void listBox1_SelectedValueChanged(object sender, EventArgs e)
    {
        if (listBox1.SelectedItem != null)
        {
            //get selected config object
            config conf = listBox1.SelectedItem as config;

            //fill extensions listbox
            listBox2.DataSource = config.Extensions;
        }
    }

答案 1 :(得分:0)

我终于找到了办法。如果我错了,请纠正我......

  private void folderListBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            extListBox.Items.Clear();
            string selectVal = folderListBox.GetItemText(folderListBox.SelectedItem);            
            //var extn = from ext in configData.con where ext.FolderName == folderListBox.SelectedValue select ext;
            var extn = from ext in configData.con where ext.FolderName == selectVal select ext;
            //var result = List 
            foreach (var ext in extn)
            {
                foreach (string extension in ext.Extensions)
                    extListBox.Items.Add(extension);
            }                
        }

在此之前我正在做

 var extn = from ext in configData.con where ext.FolderName == selectVal select ext.Extensions;

但是显示错误。