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

杰夫·杰弗里(JeffJeffery)

我是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)
    {

    }

我的输出:

如果我通过2016年8月26日的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(),当然也不要将“结果”分配给变量

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章