IEnumerable <keyvaluepair> </keyvaluepair>返回类型问题

时间:2013-03-31 20:15:08

标签: c# linq types ienumerable

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

2 个答案:

答案 0 :(得分:5)

您必须创建KeyValuePairs。

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

答案 1 :(得分: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);