【问题标题】:C# LINQ Query to filter(delete) node by dateC# LINQ 查询按日期过滤(删除)节点
【发布时间】:2015-11-28 13:50:56
【问题描述】:

我是 LINQ 新手,想编写一个 C# LINQ 查询来过滤 XDocument 对象上的节点。我将如何根据标签内的日期值进行过滤,在这种情况下是标签。我想循环并使用按日期过滤的结果创建一个新的 XDocument 对象。

X 文档:

<?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 日的日期时间值。我基本上应该取回一个带有最后一个 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


【解决方案1】:

这就是我过滤你的模型的方式。

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

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

  • 如果您想要匹配列表,请使用.ToList() 而不是.FirstOrDefault()

  • 1234563不将“结果”分配给变量

【讨论】:

  • 哇。感谢您解释运算符组合以调整结果。为我工作!
猜你喜欢
  • 2017-10-05
  • 2013-08-16
  • 2016-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多