2012-01-13 2 views
0

I가 내가 개체에 deserialise하는 데 필요한 다음 XML : 나는 임시 객체를 사용한다는 것을이 LINQ 쿼리를 최적화하는 방법은 무엇입니까?

private Animal GetAnimalFromXML(string xml) 
{ 
    var tempdata = (from c in data.Elements("collection") 
           select new 
           { 
            Cat = (string)c.Element("cat"), 
            Dog = (string)c.Element("dog"), 
            VetName = (string)c.Element("vetName"), 
           }).First(); 

    return new Animal(){ 
     Cat = tempdata.Cat, 
     Dog = tempdata.Dog, 
     VetName = tempdata.VetName 
    } 
} 

내가 좋아하지 않는다 : 이것은 LINQ를 사용하여 내 시도

<animals> 
     <retrive>true</retrive>    
     <collection> 
     <cat>big</cat> 
     <dog>spot</dog> 
     <vetName>John Smith</vetName>    
     </collection> 
    </animals> 

그래서이 문제를 해결하고이 방법을 단 하나의 쿼리로 줄이는 것이 가능한지 궁금합니다.

감사합니다. d.

+0

를 사용할 필요가 없습니다. 더 나은 방법은 Single을 사용하여 그 결과로 작업하는 것입니다. –

+0

@Petr - 컬렉션에 요소가 하나만 있다는 것을 어떻게 알 수 있습니까? Perheps 요구 사항은 "컬렉션에서 첫 번째 레코드 가져 오기"입니다. – Jamiec

+0

@ Jamiec First method가 원래의 _collection_ 요소가 아닌 전체 변형 된 콜렉션에서 호출 되었기 때문에 그렇게 생각합니다. 많은 사람들로부터 첫 번째 _collection_을 선택해야 할 필요가 있다면, First collection을 선택하는 것이 더 효과적입니다. –

답변

7

당신이 하나 개의 _collection_ 요소를 예상 할 때 첫 번째 방법을 사용하는 것은 좋은 생각이 아니다 임시 데이터

private Animal GetAnimalFromXML(string xml) 
{ 
    return (from c in data.Elements("collection") 
      select new Animal() 
         { 
          Cat = (string)c.Element("cat"), 
          Dog = (string)c.Element("dog"), 
          VetName = (string)c.Element("vetName"), 
         }).First(); 

} 
관련 문제