2010-06-11 107 views
1

我正在学习使用LINQ。我在网上看到了一些让我印象深刻的视频。为了努力学习LINQ,我决定尝试向NOAA Web服务写一个查询。如果您在浏览器的地址栏中输入“http://www.weather.gov/forecasts/xml/sample_products/browser_interface/ndfdBrowserClientByDay.php?zipCodeList=20001&format=24+hourly&startDate=2010-06-10&numDays=5”,则会看到一些XML。我已经成功地在C#程序中检索到该XML。我在加载XML到LINQable实体通过执行以下操作:C#+使用LINQ查询XML

string xml = QueryWeatherService(); 
XDocument weather = XDocument.Parse(xml); 

我已经定义了一个名为DailyForecast类,如下所示:

public class DailyForecast 
{ 
    public float HighTemperature { get; set; }  
    public float LowTemperature { get; set; } 
    public float PrecipitationPossibility { get; set; } 
    public string WeatherSummary { get; set; } 
} 

我试图写一个LINQ查询附着在我的DailyForecast类的结构。在这个时候,我只得到了这么多:

var results = from day in response.Descendants("parameters") 
       select day; 

我不知道。由于返回的XML结构,我不确定是否可以单独使用LINQ查询。我认为唯一的方法是通过一个循环并遍历XML。如果我错了,我正在寻找人来纠正我。有人可以告诉我,如果我可以使用纯粹的LINQ来坚持DailyForecast类的结构吗?如果是这样,怎么样?

谢谢!

+0

LINQ将正常工作,但如果你已经有一些类的目标相匹配的输入XML的形状,你可以考虑使用XmlSerializer的那些类型只是反序列化输入 – 2010-06-11 06:12:42

回答

1

由于您的XML可能会返回多条记录,

var results = from day in response.Descendants("parameters") 
       select new DailyForecast() 
       { 
       HighTemperature = day.Element("param name corresponding to high temp"), 
       }; 

return result.ToList(); //or any type of collection you want to return