2012-01-13 11 views
0

私持っている私は、オブジェクトに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 - コレクションには1つの要素しかないことをどのように知っていますか? Perhepsは、 "コレクションから最初のレコードを取る"という要件です。 – Jamiec

+0

@ Jamiec私は、最初のメソッドは元の_collection_要素ではなく、変換されたコレクション全体に対して呼び出されるため、多くのコレクションの中から最初のコレクションを選択する必要がある場合は、Firstコレクションを選択してから、そのコレクションのみを選択する方が効果的です。 –

答えて

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(); 

}