我可以避免这种linq查询冗余吗?

时间:2012-12-06 14:36:06

标签: c# .net linq linq-to-xml

我的代码:

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都会被“搜索”。我可以在我的示例中对该节点进行一种引用吗?

1 个答案:

答案 0 :(得分: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(),
          ....
      }
   }
});