我正在使用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,具体取决于更改类型。
此外,有没有办法查询每个文件名的最后更改,直到时间戳而不是每次更改为止并包括该点?
答案 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());