使用LINQ to XML选择最内层后代的子集
本文关键字:后代 子集 LINQ to XML 选择 使用 | 更新日期: 2023-09-27 18:02:33
我有一个类似于
的xml文件<?xml version="1.0" encoding="utf-8"?>
<client>
<Customers>
<Customer>
<Customer_TIN>ABC</Customer_TIN>
<Cust_PDR>001</Cust_PDR>
<CurrentBusinessDate>06-13-2014</CurrentBusinessDate>
<Facilities>
<Facility>
<Cust_External_Id>123</Cust_External_Id>
<FacilityExpiryDate>2014-06-13</FacilityExpiryDate>
</Facility>
<Facility>
<Cust_External_Id>456</Cust_External_Id>
<FacilityExpiryDate>2014-06-14</FacilityExpiryDate>
</Facility>
</Facilities>
</Customer>
</Customers>
</client>
我使用LINQ to XML来选择Customers元素中的数据,但是我只需要包含那些使用FacilityExpiryDate> CurrentBusinessDate的设施。
我可以使用下面的代码在Facility级别找到这个:
(from i in xDoc.Descendants("Facility")
where
Convert.ToDateTime(i.Element("FacilityExpiryDate").Value) >
Convert.ToDateTime((from j in xDoc.Descendants("CurrentBusinessDate")
select (string)j).First().ToString())
select i).ToList();
但是我想知道是否有可能从客户级别开始解析并得到相同的结果。
应该可以:
xDoc.Descendants("Facility")
.Where(
x =>
(DateTime) x.Element("FacilityExpiryDate") >
(DateTime) x.Parent.Parent.Element("CurrentBusinessDate"));
或:
xDoc.Descendants("Customer")
.SelectMany(
x =>
x.Elements("Facility")
.Where(
f =>
(DateTime) f.Element("FacilityExpiryDate") >
(DateTime) x.Element("CurrentBusinessDate")));