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