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>

c# LINQ查询按日期过滤(删除)节点

我将如何过滤你的模型。

var model = xDoc.Descendants("Model")
    .Where(m => m.Element("ReleaseDate").Value == filterDate.ToString("M/d/yyyy"))
    .FirstOrDefault();

返回一个XElement。你可以用这个元素创建你的新文档。

  • 如果你想要一个匹配列表,那么使用.ToList()而不是.FirstOrDefault()

  • 如果您想删除所有不匹配的内容,那么您可以通过将==更改为!=来否定条件,并添加.Remove()而不是FirstOrDefault(),当然,不要将"结果"分配给变量