0

アーティスト ID ですべての曲を取得するこの LINQ to XML 要求があります。

  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' を 'string' に変換できません

ListBox に結果を適切に追加するにはどうすればよいですか? ご協力いただきありがとうございます。

4

2 に答える 2

3

を使用しToList()ているため、列挙可能なリストが返されます。

列挙可能なコレクションを反復処理しようとすると、コードはリストを変換できない char に変換しようとします。

コードを次のように変更します。

  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 に答える