2012-12-06 85 views
2

我的代碼:我可以避免這種linq查詢冗餘嗎?

var myList = xDoc.Descendants("localita").Select(n => new 
{ 
    ID = n.Element("id").Value.ToString(), 
    Localita = n.Element("nome").Value.ToString(), 
    Lat = n.Element("lat").Value.ToString(), 
    Lng = n.Element("lon").Value.ToString(), 
    MeteoOggi = new MeteoGiorno() 
    { 
     Min = n.Descendants("previsione").First().Element("temp_perc").Value.ToString(), 
     Max = n.Descendants("previsione").First().Element("temp").Value.ToString(), 
     DescrizioneTempo = n.Descendants("previsione").First().Element("desc_tempo").Value.ToString(), 
     Precipitazioni = n.Descendants("previsione").First().Element("prec").Value.ToString(), 
     VentoDirezione = n.Descendants("previsione").First().Element("v_dir").Value.ToString(), 
     VentoIntensita = n.Descendants("previsione").First().Element("v_int").Value.ToString(), 
     Pressione = n.Descendants("previsione").First().Element("press").Value.ToString(), 
     ZeroTermico = n.Descendants("previsione").First().Element("zerot").Value.ToString(), 
     Immagine = n.Descendants("previsione").First().Element("id_tempo").Value.ToString() 
    } 
}); 

但正如你所看到的,n.Descendants("previsione").First()是當我設定值類MeteoGiorno每一次「搜索」。我可以在我的例子中對該節點進行一些引用嗎?

回答

6

當然,你可以,只是改變Select

var myList = xDoc.Descendants("localita").Select(n => { 
    var previsione = n.Descendants("previsione").First(); 

    return new { 
     ID = n.Element("id").Value.ToString(), 
     .... 
     MeteoOggi = new MeteoGiorno() 
     { 
      Min = previsione.Element("temp_perc").Value.ToString(), 
      Max = previsione.Element("temp").Value.ToString(), 
      .... 
     } 
    } 
}); 
+0

是的,但我也必須保留數據,這些數據來自'N'的第一個塊:o – markzzz

+0

@markzzz - 有沒有區別..我只是沒有複製你的所有代碼。查看更新 - 是否更清晰? – Jamiec

+0

這只是完美的!謝謝! Linq是如此強大! – markzzz