c# LINQ查询按日期过滤(删除)节点
本文关键字:删除 节点 过滤 日期 LINQ 查询 | 更新日期: 2023-09-27 18:10:51
我是LINQ新手,想写一个c# LINQ查询来过滤XDocument对象上的节点。如何根据标记(在本例中是标记)内的日期值进行筛选?我想循环并创建一个新的XDocument对象,其中包含按日期过滤的结果。
XDocument:
<?xml version="1.0" encoding="UTF-8"?>
<BMW>
<Model>
<Desc>335</Desc>
<ReleaseDate>6/20/2016</ReleaseDate>
<Engine>V6</Engine>
<BodyStyle></BodyStyle>
</Model>
<Model>
<Desc>550</Desc>
<ReleaseDate>7/12/2016</ReleaseDate>
<Engine>V6</Engine>
<BodyStyle></BodyStyle>
</Model>
<Model>
<Desc>750</Desc>
<ReleaseDate>8/26/2016</ReleaseDate>
<Engine>V8</Engine>
<BodyStyle>Executive Sedan</BodyStyle>
</Model>
</BMW>
这是我的方法签名
private XDocument FilterByDate(XDocument xDoc, DateTime filterDate)
{
}
My Output:
如果我传递08/26/2016的datetime值。我应该返回一个带有最后一个ModelTag的XDocument。
<?xml version="1.0" encoding="UTF-8"?>
<BMW>
<Model>
<Desc>750</Desc>
<ReleaseDate>8/26/2016</ReleaseDate>
<Engine>V8</Engine>
<BodyStyle>Executive Sedan</BodyStyle>
</Model>
</BMW>
我将如何过滤你的模型。
var model = xDoc.Descendants("Model")
.Where(m => m.Element("ReleaseDate").Value == filterDate.ToString("M/d/yyyy"))
.FirstOrDefault();
返回一个XElement
。你可以用这个元素创建你的新文档。
如果你想要一个匹配列表,那么使用
.ToList()
而不是.FirstOrDefault()
如果您想删除所有不匹配的内容,那么您可以通过将
==
更改为!=
来否定条件,并添加.Remove()
而不是FirstOrDefault()
,当然,不要将"结果"分配给变量