0

我按照教程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()不是一种公认​​的方法,尽管微软说它是.

当我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

在我的 Webmatrix 中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>

我究竟做错了什么?

(顺便说一句,我遵循了教程末尾的建议,但它们也没有用。我昨天用谷歌搜索了几个小时,并在web.config文件中尝试了一些东西,但充其量没有帮助)

4

3 回答 3

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();
于 2013-09-12T12:47:42.900 回答
1

我会选择以下内容:

int maxTemp = (int)xdoc.Root
                       .Element("data")
                       .Element("parameters")
                       .Elements("temperature")
                       .FirstOrDefault(t => (string)t.Attribute("type") == "maximum")
                       .Element("value");
于 2013-09-12T14:07:46.333 回答
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;  
于 2014-05-10T14:33:22.577 回答