我的LINQ查询只返回1个结果

时间:2011-02-20 04:05:32

标签: c# linq linq-to-xml

我的LINQ查询仅返回第一个结果(Class)。这是我正在使用的代码:

        XDocument xmlDoc = XDocument.Load("Decks/Test.xml");
        List<Cards> tempdeck = (from deck in xmlDoc.Elements("Deck")
                                select new Cards
                                 {
                                     Name = deck.Element("Type").Value

                                 }).ToList<Cards>();

        foreach (var item in tempdeck)
        {
            ((MessageBroker)App.Current.Resources["MessageBroker"]).GameLog.Add(item.Name.ToString());

        }

这就是我的XML文件:

<Deck>
  <Type>
    <Name>Class</Name>
  </Type>
  <Type>
    <Name>stsfs</Name>
  </Type>
  <Type>
    <Name>Class</Name>
  </Type>
  <Type>
      <Name>Class</Name>
    </Type>
</Deck>

我正在以这种方式格式化它,因为当我开始工作时,我想在查询中添加多个属性 - 而不仅仅是名称。

提前致谢!

2 个答案:

答案 0 :(得分:3)

您的示例中并不清楚,但您似乎有一个 Deck元素与多个 Type子元素。你的代码假设相反,即多个甲板,每个甲板都有一个(或一个有趣的)类型孩子。

请改为尝试:

( from type in xmlDoc.Element("Deck").Elements("Type")
  select new Cards { Name = type.Value }
).ToList()

“卡片”是从唯一牌组的每个类型的孩子产生的。

如果有多个套牌,请使用Mark Cidade的回答。

答案 1 :(得分:1)

在您的查询中,您只需从单个Deck元素中进行选择,然后选择第一个Type元素。您需要从每个Type元素中进行选择:

    List<Cards> tempdeck = (from deck in xmlDoc.Elements("Deck")
                            from type in deck.Elements("Type")
                            select new Cards
                             {
                                 Name = type.Value

                             }).ToList<Cards>();