[英]LINQ to XML - parent's attribute in where clause
我對此where子句感到麻煩;
from item in
_documentRoot.Descendants("Level1").Descendants("Level2").Descendants("Level3")
where
_documentRoot.Descendants("Level1").Descendants("Level2").Attributes("id").First().Value == 12345
我想要ID為12345的Level2元素中的Level3項目列表。
一如既往,非常感謝
我會在這里使用XPath:
var items = xdoc.XPathSelectElements("//Level1/Level2[@id='1234']/Level3");
它從Level2
項目中選擇所有具有屬性id
等於1234的Level3
項目。使用LINQ方法語法將類似於:
var items = xdoc.Descendants("Level1")
.Elements("Level2")
.Where(l2 => (string)l2.Attribute("id") == "1234")
.SelectMany(l2 => l2.Elements("Level3"));
像這樣的東西(未經測試):
from item in _documentRoot.Descendants("Level1").Descendants("Level2")
where item.Attributes("id").First().Value == "1234"
select item.Descendants("Level3")
var res = from item
in _documentRoot.Descendants("Level1").Descendants("Level2")
where item.Attributes("id").First().Value == "12345"
select item.Descendants("Level3");
_documentRoot.Descendants("Level1")
.Descendants("Level2")
.Where(i => i.Attributes.Any(a => a.Value == "1234"))
.SelectMany(i => i.Descendants("Level3"));
.SelectMany
擴展方法對於將所有Level3后代串聯到一個IEnumerable中非常重要
如果id
屬性可能存在一些問題。
_root.Descendants("Level1")
.Elements("Level2")
.Where(T => T.Attributes("id").Any(W => W.Value == "12345"))
.Elements("Level3");
var res = from x in _documentRoot.Descendants("Level1").Descendants("Level2")
where x.Attributes("ID").FirstOrDefault(id=> id.Value=="12345") != null
select x.Descendants("Level3");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.