是否可以将这个foreach循环转换为LINQ到XML循环



我最初问了这个问题(我们可以以可排序的方式自动将子元素添加到XElement中吗?(,它被关闭为重复(如何在XML文档中的特定位置添加XElement(。

这是我目前拥有的代码:

bool bInserted = false;
foreach (var weekDB in xdoc.Root.Elements())
{
DateTime datWeekDB = DateTime.ParseExact(weekDB.Name.LocalName, "WyyyyMMdd", CultureInfo.InvariantCulture);
if (datWeekDB != null && datWeekDB.Date > historyWeek.Week.Date)
{
// Insert here
weekDB.AddBeforeSelf(xmlHistoryWeek);
bInserted = true;
break;
}
}
if (!bInserted)
xdoc.Root.Add(xmlHistoryWeek);

它运行良好。但我想知道我是否可以使用LINQ来实现同样的事情?联系起来的答案表明:

搜索要添加的元素并使用add方法,如下所示

xDoc.Element("content")
.Elements("item")
.Where(item => item.Attribute("id").Value == "2").FirstOrDefault()
.AddAfterSelf(new XElement("item", "C", new XAttribute("id", "3")));

但我不明白如何根据我的代码逻辑得出这样的逻辑。

我认为最好的方法是:您将使用LINQ来查找特定的元素。然后,您将根据您的发现插入到文档中。

这样的东西:

var targetElement = xdoc.Root.Elements()
.Where(weekDB => {
DateTime datWeekDB = DateTime.ParseExact(weekDB.Name.LocalName, "WyyyyMMdd", CultureInfo.InvariantCulture);
return datWeekDB != null && datWeekDB.Date > historyWeek.Week.Date;
})
.FirstOrDefault();
if (targetElement == null)
{
xdoc.Root.Add(xmlHistoryWeek);
}
else
{
targetElement.AddBeforeSelf(xmlHistoryWeek);
}

最新更新