我是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] 删除。
我来说两句