0

好吧,我最近问了一个关于如何使用自定义数据类型填充 Collection的问题,但现在我不知道如何填充简单的字符串 Collection。也许有人愿意帮助我。

我的简化类结构:

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 回答