0

我有这个 LINQ to XML 请求,它按艺术家 ID 检索所有歌曲:

  var query = from c in loaded.Descendants("artist")
                    where c.Attribute("Id").Value.Equals("1")
                    from s in c.Descendants("song")
                    select s.Attribute("path").Value.ToList();

当我尝试将结果添加到我的 ListBox 中时:

foreach (string track in query)
        {
            myList.Items.Add(track);
        }

我收到了这个错误:

错误 CS0030:无法将类型“System.Collections.Generic.List”转换为“字符串”

如何在我的 ListBox 中正确添加我的结果?谢谢你的帮助。

4

2 回答 2

3

由于您的使用,ToList()您将返回一个可枚举的列表。

当您尝试遍历可枚举集合时,您的代码会尝试将列表转换为无法执行的字符。

将您的代码更改为:

  var query = from c in loaded.Descendants("artist")
                    where c.Attribute("Id").Value.Equals("1")
                    from s in c.Descendants("song")
                    select s.Attribute("path").Value

如果您不想使用 IEnumerable 的延迟加载功能,您可以将整个结果集转换为列表。

于 2012-04-08T20:59:52.313 回答
1

您应该使用ToList()整个查询,而不仅仅是“路径”属性值:

var query = (from c in loaded.Descendants("artist")
                    where c.Attribute("Id").Value.Equals("1")
                    from s in c.Descendants("song")
                    select s.Attribute("path").Value).ToList();

或发送它,以便在需要时评估查询结果。

于 2012-04-08T21:01:27.867 回答