gpt4 book ai didi

c# - Linq - 无法将类型 'IEnumerable>' 隐式转换为 'IEnumerable<.XElement>'

转载 作者:行者123 更新时间:2023-12-02 05:40:57 27 4
gpt4 key购买 nike

我收到以下错误:

Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<System.Collections.Generic.IEnumerable<System.Xml.Linq.XElement>>' to 'System.Collections.Generic.IEnumerable<System.Xml.Linq.XElement>'. An explicit conversion exists (are you missing a cast?) 

我不明白为什么。这里有我的代码,我在其中尝试获取 DataContainer 元素,该元素的 Name 属性与 name.key 相同:

 XDocument xml = XDocument.Load(name.Value);
IEnumerable<XElement> columns = from d in xml.Descendants("DataContainer")
where (d.Attribute("Name").Value.Equals(name.Key))
select d.Descendants("ArrayOfColumn");

这里是我的 XML 文件:

<?xml version="1.0" encoding="utf-8"?>
<DataContainers>
<DataContainer xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Name="IRS vs E3M" Currency="EUR">
<ArrayOfColumn Name="Maturite" isData="false">
<Line Value="1Y" />
<Line Value="2Y" />
<Line Value="3Y" />
<Line Value="4Y" />
<Line Value="5Y" />
<Line Value="6Y" />
<Line Value="7Y" />
<Line Value="8Y" />
<Line Value="9Y" />
<Line Value="10Y" />
<Line Value="15Y" />
<Line Value="20Y" />
<Line Value="30Y" />
<Line Value="40Y" />
<Line Value="50Y" />
<Line Value="60Y" />
</ArrayOfColumn>
<ArrayOfColumn Name="Value" isData="true">
<Line Value="EURAB3E1Y" />
<Line Value="EURAB3E2Y" />
<Line Value="EURAB3E3Y" />
<Line Value="EURAB3E4Y" />
<Line Value="EURAB3E5Y" />
<Line Value="EURAB3E6Y" />
<Line Value="EURAB3E7Y" />
<Line Value="EURAB3E8Y" />
<Line Value="EURAB3E9Y" />
<Line Value="EURAB3E10Y" />
<Line Value="EURAB3E15Y" />
<Line Value="EURAB3E20Y" />
<Line Value="EURAB3E30Y" />
<Line Value="EURAB3E40Y" />
<Line Value="EURAB3E50Y" />
<Line Value="EURAB6E60Y" />
</ArrayOfColumn>
</DataContainer>
</DataContainers>

有人可以帮助我并解释为什么吗?

最佳答案

问题是您的 d 是后代的集合,然后您过滤它们并从任何通过过滤器的任何后代中拉出更多的后代。

即使您的过滤器只匹配一个元素,系统仍会将其视为一个集合。如果你知道只会有一个结果,那么你可以在拉取后代之前在 d 上使用 .Single() 方法。例如:

XDocument xml = XDocument.Load(name.Value); 
IEnumerable<XElement> columns = xml.Descendants("DataContainer")
.Where(d => d.Attribute("Name").Value.Equals(name.Key))
.Single()
.Select(d => d.Descendants("ArrayOfColumn"));

我已将其更改为方法链接,因为它为此流动得更好。另请注意,可以将 where 表达式放入 single 方法中,但这看起来更清晰。

关于c# - Linq - 无法将类型 'IEnumerable<IEnumerable<.XElement>>' 隐式转换为 'IEnumerable<.XElement>',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10978471/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com