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

时间:2015-09-02 21:39:27

标签: c# linq

我是LINQ的新手,想要编写一个C#LINQ查询来过滤XDocument对象上的节点。如何根据标签内的日期值进行过滤,在本例中为标签。我想循环并使用Date按过滤结果创建一个新的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)
    {

    }

我的输出:

如果我通过了日期时间值08/26/2016。我基本上应该使用最后一个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>

1 个答案:

答案 0 :(得分:2)

这就是我过滤模型的方法。

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

这将返回XElement。您可以使用该元素制作新文档。

  • 如果您需要匹配列表,请使用.ToList()代替.FirstOrDefault()

  • 如果你想删除所有不匹配的内容,那么你可以通过将==更改为!=来取消条件,然后添加.Remove()而不是{{ 1}},当然,不将“结果”分配给变量