使用LINQ查询XML日志

时间:2016-03-31 21:44:35

标签: c# xml linq

我正在使用FileWatcher将所有更改记录到带有

的XML文件
XDocument log = XDocument.Load(logpath);
XElement change = new XElement("change");
change.Add(new XAttribute("datetime", stamp));
change.Add(new XAttribute("status", "Deleted"));
change.Add(new XAttribute("filename", filepath));


log.Add(change);
log.Save(logpath);

然后,当我想查看某个时间戳所做的更改时,我会用

查询它
var query = _filelog.Elements().Where(x => ((DateTime)x.Element("datetime")) <= time);

这只是一个IEEumerable的XElements,并不是很方便使用。如何将其转换为更方便的集合,例如keyvaluepairs状态列表:“已删除”等? XElements中有不同数量的XAttributes,具体取决于更改类型。

此外,有没有办法查询每个文件名的最后更改,直到时间戳而不是每次更改为止并包括该点?

1 个答案:

答案 0 :(得分:0)

尝试以下解决方案之一。首先是如果DateTime是唯一的,第二个是如果有重复的DateTime值。

            Dictionary<DateTime, XElement> dict1 = doc.Elements("change")
                .GroupBy(x => DateTime.Parse(x.Attribute("datetime").Value), y => y)
                .ToDictionary(x => x.Key, y => y.FirstOrDefault());

            Dictionary<DateTime, List<XElement>> dict2 = doc.Elements("change")
                .GroupBy(x => DateTime.Parse(x.Attribute("datetime").Value), y => y)
                .ToDictionary(x => x.Key, y => y.ToList());