2012-12-06 2 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

관련 문제