如何填充一个Collection

本文关键字:Collection string 一个 何填充 填充 | 更新日期: 2023-09-27 18:02:46

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

我的简化类结构:

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()))
}

如何填充一个Collection<string>

看起来你只需要这个:

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()
}

我现在是这样解决的,如果有人好奇的话。但我确信我的解决方案可能会带来不必要的开销。

 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();