2012-10-02 31 views
0
var runnerElement = xDox.Descendants("User") 
     .SingleOrDefault(u => u.Element("Name").Value == "David"); 

if (runnerElement != null) 
{ 
    var result = runnerElement.Descendants("Runners") 
     .Select(a => new 
     { 

      Date = DateTime.Parse(a.Element("Date").Value), 
      MyLength = int.Parse(a.Element("Length").Value) 
      City = a.Element("City").Value, 
     }) 
     .Where(a => a.Date >= DateTime.Parse("3/29/2012") 
       && a.Date <= DateTime.Parse("8/29/2012")) 

     .GroupBy(a => a.City) 
     .Select(g => new {City = g.Key, Avg = g.Average(x => x.MyLength)}); 
} 

你將如何通過這個數據循環,因此它可以給我一個輸出類似這樣通過XML數據循環輸出結果

User:David 
Date:3/29/2012 to 8/29/2012 
Average Distance in Paris : //Data 
Average Distance in Madrid: //Data 

我試圖澄清我的代碼多一點點..

+0

你在查詢中沒有選擇「User」和「Date」?你怎麼得到這個?你是否要單獨獲取它們,然後你可以簡單地在結果上使用foreach循環並顯示它。 – Habib

回答

0

要糾正我以前的答案,它應該有一個方法,假設GetData與相關的輸入,所以你可以使用StringBuilder建立字符串:

public string GetData(string userName, DateTime fromDate, DateTime toDate) 
{ 
    var userElement = xDox.Descendants("User") 
      .SingleOrDefault(u => u.Element("Name").Value == userName); 

    var builder = new StringBuilder(); 

    if (userElement != null) 
    { 
     var result = userElement.Descendants("Attempts") 
      .Select(a => new 
       { 
        Place = a.Element("Place").Value, 
        Date = DateTime.Parse(a.Element("Date").Value), 
        Distance = int.Parse(a.Element("Distance").Value) 
       }) 

      .Where(a => a.Date >= fromDate 
         && a.Date <= toDate) 

      .GroupBy(a => a.Place) 
      .Select(g => new {Place = g.Key, Avg = g.Average(x => x.Distance)}); 

     builder.AppendFormat("User:{0}", userName); 
     builder.AppendLine(); 

     builder.AppendFormat("Date:{0} to {1}", fromDate, toDate); 
     builder.AppendLine(); 

     foreach (var item in result) 
     { 
      builder.AppendFormat("Average Distance in {0}: {1}", 
               item.Place, item .Avg); 
      builder.AppendLine(); 
     } 
    } 

    return builder.ToString(); 
} 

爲了使用:

var fromDate = DateTime.Parse("8/30/2012"); 
var toDate = DateTime.Parse("10/1/2012"); 

string result = GetData("David", fromDate, toDate); 
+0

我得到這個錯誤:名稱'r'在當前上下文中不存在 –

+0

@IsraelRodriguez:我已經更改爲項目,再次檢查 –

+0

對不起,愚蠢的問題,但GetData有什麼樣的參數,我可以做些什麼像這樣GetData(「David」,「2012年8月30日」,「2012年10月1日」 –

1

嗯,你已經失去的信息前兩位查詢(但他們硬編碼反正),但對於「平均距離」位,它是那樣簡單:

foreach (var item in result) 
{ 
    Console.WriteLine("Average Distance in {0}: {1}", item.Place, item.Avg); 
} 

這就是你想要的嗎?顯然你需要在if區塊內,以便result在範圍內。