2017-02-01 2 views
1

Я хочу выбрать элемент с самой последней отметкой времени (сохраненной как атрибут) и удалить любую другую, которая может существовать (потому что это будет означать, что пользователь перепутал с xml-файлом).Удаление устаревших элементов из XML-документа с использованием XML.Linq

(каталог, имя и имя файла, поля и/или параметры метода, содержащие это тело)

 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

Смежные вопросы