我有以下查询,它只返回第一条记录。如何修改它以返回该类别中的所有元素?
代码:
XDocument xdoc = XDocument.Load(Server.MapPath("/Content/xml/Collections.xml"));
var result = xdoc.Descendants("Category")
.Where(x => (string) x.Attribute("name") == "Apartment")
.Select(x => x.Element("ListingId"));
XML:
<Items>
<Category name="Apartment">
<ListingId>1100121</ListingId>
<ListingId>1100089</ListingId>
<ListingId>1100090</ListingId>
<ListingId>1100092</ListingId>
<ListingId>1100067</ListingId>
<ListingId>1100136</ListingId>
<ListingId>1100302</ListingId>
<ListingId>1100248</ListingId>
<ListingId>1100072</ListingId>
<ListingId>1100167</ListingId>
<ListingId>1100309</ListingId>
<ListingId>1100023</ListingId>
</Category>
<Category name="Single Family">
<ListingId>1100001</ListingId>
<ListingId>1100002</ListingId>
<ListingId>1100017</ListingId>
</Category>
</Items>
答案 0 :(得分:1)
您可以使用 Elements
而不是 Element
来获取所有匹配的元素,而不仅仅是第一个。
如果您只对一个类别感兴趣,那么您可以使用它来获取它的所有 ListingId
元素。
var result = xdoc.Descendants("Category")
.FirstOrDefault(x => (string)x.Attribute("name") == "Apartment")
?.Elements("ListingId");
这将为您提供一个 IEnumerable<XElement>
,其中包含 Apartment 类别的所有 ListingId
元素。
否则,如果您想从所有匹配的类别中获取所有 ListingId
,您可以使用 SelectMany
:
var result = xdoc.Descendants("Category")
.Where(x => (string)x.Attribute("name") == "Apartment")
.SelectMany(x => x.Elements("ListingId"));