我是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>
答案 0 :(得分:2)
这就是我过滤模型的方法。
var model = xDoc.Descendants("Model")
.Where(m => m.Element("ReleaseDate").Value == filterDate.ToString("M/d/yyyy"))
.FirstOrDefault();
这将返回XElement
。您可以使用该元素制作新文档。
如果您需要匹配列表,请使用.ToList()
代替.FirstOrDefault()
如果你想删除所有不匹配的内容,那么你可以通过将==
更改为!=
来取消条件,然后添加.Remove()
而不是{{ 1}},当然,不将“结果”分配给变量