无法在Webmatrix站点中调用System.Xml.Linq的Elements()方法

时间:2013-09-12 12:44:53

标签: asp.net linq razor webmatrix

我遵循了教程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文件中的一些内容,但它没有帮助,最好的)

3 个答案:

答案 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;