IEnumerable返回类型问题

本文关键字:返回类型 问题 KeyValuePair IEnumerable | 更新日期: 2023-09-27 18:06:49

我正在研究一个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;
}

IEnumerable<KeyValuePair>返回类型问题

必须创建KeyValuePairs

...
select new KeyValuePair(y.Attribute("id").Value, z.Value)

您可以使您的查询更加排序。注意,我已经删除了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);