0

我正在研究 linq 方法,似乎无法获得与方法签名匹配的返回类型。任何指导将不胜感激。

谢谢!

private static IEnumerable<KeyValuePair<string, string>> RunQuery(XDocument doc)
{
    var data = from b in doc.Descendants("Company")
               where b.Attribute("name").Value == "CompanyA"
               from y in b.Descendants("Shirt")
               from z in y.Descendants("Size")
               select new
               {
                   color = y.Attribute("id").Value,
                   price = z.Value
               };

    return data;
}
4

2 回答 2

5

您必须创建 KeyValuePairs。

...
select new KeyValuePair(y.Attribute("id").Value, z.Value)
于 2013-03-31T20:17:03.683 回答
1

您可以使您的查询更加排序。注意我已经删除了from y in b.Descendants("Shirt"),因为Descendants解析整个 xml 节点,包括它的所有后代,直到最低级别。此查询将返回Dictionary<string, string>,它实现IEnumerable<KeyValuePair<string, string>>,因此您不需要更改方法签名,但我强烈建议这样做,因为客户端将无法访问具有恒定时间的字典元素

return doc.Descendants("Company")
          .Where(node => node.Attribute("name").Value == "CompanyA")
          .Descendants("Size")
          .ToDictionary(node => node.Attribute("id").Value,
                        node => node.Value);
于 2013-03-31T20:27:59.067 回答