我遵循了教程Consuming and Storing Data from a REST Service with ASP.NET Razor,但在运行时我得到了这个ASP.NET错误:
CS1061: 'System.Collections.Generic.IEnumerable<System.Xml.Linq.XElement>' does not contain a definition for 'Elements' and no extension method 'Elements' accepting a first argument of type 'System.Collections.Generic.IEnumerable<System.Xml.Linq.XElement>' could be found (are you missing a using directive or an assembly reference?)
参考这一行:
var maxTemp = from t in xdoc.Descendants("temperature").Elements("value")
where t.Parent.Attribute("type").Value == "maximum"
select t;
这似乎表明Elements()
不是公认的方法,即使Microsoft says it is。
当我Show Detailed Compiler Output
时,它说:
C:\Windows\system32> "C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe" /t:library /utf8output /R:"C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Xml.Linq\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.Linq.dll"
但后来它说:
Microsoft (R) Visual C# Compiler version 4.0.30319.17929
for Microsoft (R) .NET Framework 4.5
在我的网络主题Settings
中,它显示我正在使用.NET 4 (Integrated)
和ASP.NET Web Pages 2.0.20710.0
所有这些C#代码都在@functions{}
文件的~\App_Data\Weather.cshtml
块中。
我的Default.cshtml
文件包含以下内容:
@using System.Xml.Linq
@{
var temp = Weather.GetWeather("98052");
}
<ol>
<li>Zip code: @temp.Zip</li>
<li>High: @temp.MaxTemp</li>
<li>Low: @temp.MinTemp</li>
<li>Forecast: @temp.Forecast</li>
<li>Longitude: @temp.Longitude</li>
<li>Latitude: @temp.Latitude</li>
</ol>
我做错了什么?
(顺便说一句,我按照本教程末尾的建议进行了操作,但它们也没有用。我昨天用Google搜索了几个小时并尝试了web.config
文件中的一些内容,但它没有帮助,最好的)
答案 0 :(得分:1)
替换这个:
var maxTemp = from t in xdoc.Descendants("temperature").Elements("value") where t.Parent.Attribute("type").Value == "maximum" select t;
使用:
var maxTemp = from t in xdoc.Descendants("temperature")
where t.Attribute("type").Value == "maximum"
select new{value= t.Element("value").Value};
如果你想要第一张唱片试试这个:
var maxTemp = (from t in xdoc.Descendants("temperature")
where t.Attribute("type").Value == "maximum"
select new{value= t.Element("value").Value}).FirstOrDefault();
答案 1 :(得分:1)
我会跟随以下内容:
int maxTemp = (int)xdoc.Root
.Element("data")
.Element("parameters")
.Elements("temperature")
.FirstOrDefault(t => (string)t.Attribute("type") == "maximum")
.Element("value");
答案 2 :(得分:0)
我用以下代码替换了代码,之后它工作得很好:
var maxTemp = from XElement in xdoc.Descendants("temperature").Elements("value")
where XElement.Parent.Attribute("type").Value == "maximum"
select XElement;
var minTemp = from XElement in xdoc.Descendants("temperature").Elements("value")
where XElement.Parent.Attribute("type").Value == "minimum"
select XElement;