0

さて、最近、コレクションにカスタムデータ型を入力する方法について質問しましたが、単純な文字列コレクションを入力する方法がわかりません。多分誰かが私を助けてくれるでしょう。

私の簡略化されたクラス構造:

public class Accommodation
{
    [XmlElement("Attribute")]
    public Collection<string> Categories;        
}

xmlは次のようになります:

<Accommodation Id="f7cfc3a5-5b1b-4941-8d7b-f8a4a71fa530">
  <Categories>
    <Category Id=Time="1abc23"/>
    <Category Id=Time="2abc34"/>
  </Categories>
</Accommodation>

そして、それが私のlinqステートメントの現在の様子です(そこで助けが必要です:

from x in doc.Descendants("Accommodation")
select new Accommodation()
{
    Categories = new Collection<string>(x.Descendants("Categories").SelectMany(
    categories => categories.Elements("Category").Select(
    (string)x.Element("Categories").Element("Category").Attributes("Id")).ToList()))
}

よろしく

4

2 に答える 2

2

これだけが欲しいようです:

doc.Descendants("Accommodation")
   .Select(x => new Accomodation { Categories = 
                  x.Element("Categories")
                   .Elements("Category")
                   .Select(c => (string)c.Attribute("id")).ToList() });

Accommodationが XML のルート タグである場合は、さらに単純になります。

var accomodation = new Accomodation
{
    Categories = doc.Root.Element("Categories")
                         .Elements("Category")
                         .Select(c => (string)c.Attribute("id")).ToList()
}
于 2013-03-06T14:24:24.193 に答える
0

誰かが興味を持っているなら、私は今それをそのように解決しました。しかし、私のソリューションには、おそらく必要以上のオーバーヘッドが伴うと確信しています。

 IEnumerable<Accommodation> temp = 
    (from x in doc.Descendants("Accommodation")
        select new Accommodation()
        {
            Categories = new Collection<string>(
                x.Descendants("Categories").SelectMany(categories 
                    => categories.Elements("Category").Select(category 
                        => category.Attribute("Id").Value ?? "")).ToList())
        }).ToList();
于 2013-03-14T07:39:56.303 に答える