2017-02-01 6 views
1

最新のタイムスタンプ(属性として保存されている)で要素を選択し、存在する可能性がある要素をすべて削除します。内部XML.Linqを使用してXML文書から古くなった要素を削除する

(ディレクトリ、名とファイル名は、この体を含む方法にフィールドおよび/またはパラメータです)

 using (FileStream fileStream = new FileStream(Path.Combine(directory, fileName), FileMode.OpenOrCreate)) 
     { 
      XElement xmlRoot = XElement.Load(fileStream); 
      var query = from e in xmlRoot.Elements("key") 
       where e.Attribute("name")?.Value == name 
       orderby Int32.Parse(e.Attribute("timestamp")?.Value) descending select e; 
      if(query.Count() == 1) 
      { 
       return query.First(); 
      } 
      else if (query.Count() > 1) 
      { 
       //here I need to delete any other than First (which has 
       //the latest timestamp, and return first, just like above) 
      } 
      else 
      { 

      } 
     } 

具体的には、私はどんな時代遅れの要素(小さいタイムスタンプを持つもの)を削除する方法を知りたいですif (query.Count() > 1)節。 LINQはいつも私に少し迷っています。申し訳ありませんが質問が簡単な場合。

PS:この問題の具体的な計算名を知っている人は、自分の質問を編集して名前を変更し、必要に応じて改名することをお勧めします。私は素人です。

答えて

1

あなたはあなたのクエリの結果から最初の要素をスキップし、この使用Remove拡張メソッドを行うことができます:

else if (query.Count() > 1) 
{ 
    var element=query.First(); 
    query.Skip(1).Remove();// do this to remove unwanted elements from your xml 
    return element;  
} 
+0

感謝を!それがうまくいくとは想像もできませんでした。 – FinnTheHuman

+0

@FinnTheHuman、よろしいですか;) – octavioccl

関連する問題