我想选择具有最新时间戳的元素(存储为属性)并删除可能存在的任何其他元素(因为这意味着用户与xml文件混淆)。
(directory,name和fileName是包含此主体的方法的字段和/或参数)
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:我鼓励任何知道此问题的具体计算名称的人编辑和重命名我的问题,并根据需要重新编写。我是业余爱好者。
答案 0 :(得分: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;
}