2

私はこのようなxmlを持っています:

<countries>
    <country ID="MX">
        <idea ID="Valor1">nota1</idea>
        <idea ID="Valor2">nota2</idea>
        <idea ID="Valor3">nota3</idea>
        <idea ID="Valor4">nota4</idea>
    </country>
    <country ID="US">
        <idea ID="Valor1">nota1</idea>
        <idea ID="Valor2">nota2</idea>
        <idea ID="Valor3">nota3</idea>
        <idea ID="Valor4">nota4</idea>
    </country>
</countries>

LINQ to XML で特定の型のリストを取得するにはどうすればよいですか? 私はこのようなことを試しました:

クラスを作成しました:

public class Ideas
{
    public string Country { get; set; }

    public List<ListItem> ListIdeas { get; set; }
}

次に、このクラスを使用してリストを作成します。

XDocument xdoc = XDocument.Load(this.Server.MapPath("~/config/ideas.xml"));

var cat = from p in xdoc.Descendants("countries")
                        .Elements("country")
                        .Select(m => new Ideas 
                            {
                                Country = m.Attribute("ID").Value, 
                                ListIdeas = m.Elements("idea")
                                             .Select(c => 
                                                 new ListItem 
                                                 {
                                                     Text = c.Attribute("ID").Value , 
                                                     Value = c.Value
                                                 }).ToList()
                            });

しかし、次のエラーが発生します。

クエリ本体は select 句または group 句で終了する必要があります

select 句の式の型が正しくありません。'Select' の呼び出しで型の推定に失敗しました。

4

2 に答える 2

4

クエリ構文と拡張メソッド構文を混在させます。いずれかを選択します。

var r = (from c in xdoc.Element("countries")
                       .Elements("country")
         select new Country
         {
             ID = c.Attribute("ID").Value,
             Ideas = (from i in c.Elements("idea")
                      select new Idea
                      {
                          Text = i.Attribute("ID").Value, 
                          Value = i.Value
                      }).ToList()
         }).ToList();

読みやすくするために、クラスとプロパティの名前を変更したことに注意してください。


別の構文で同じ by:

var q = xdoc.Element("countries")
            .Elements("country")
            .Select(c => new Country
                 {
                      ID = c.Attribute("ID").Value,
                      Ideas = c.Elements("idea")
                               .Select(i => new Idea
                                   {
                                       Text = i.Attribute("ID").Value, 
                                       Value = i.Value
                                   })
                               .ToList()
                 })
            .ToList();
于 2013-01-23T19:10:36.850 に答える
1

最後に選択がありません。試す:

XDocument xdoc = XDocument.Load(this.Server.MapPath("~/config/ideas.xml"));

List<Ideas> cat = from p in xdoc.Descendants("countries").Elements("country")
                         .Select(m => new Ideas 
                             {
                                 Country = m.Attribute("ID").Value, 
                                 ListIdeas = m.Elements("idea")
                                 .Select(c => 
                                     new ListItem 
                                     {
                                         Text = c.Attribute("ID").Value , 
                                         Value = c.Value
                                     }).ToList()
                             }) select p;
于 2013-01-23T19:09:55.323 に答える