0

我在使用这个 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 项目列表。

一如既往,非常感谢

4

6 回答 6

1

我会在这里使用 XPath:

var items = xdoc.XPathSelectElements("//Level1/Level2[@id='1234']/Level3");

它从属性等于 1234 的项目中选择所有Level3项目。使用 LINQ 方法语法,它将如下所示:Level2id

var items = xdoc.Descendants("Level1")
                .Elements("Level2")
                .Where(l2 => (string)l2.Attribute("id") == "1234")
                .SelectMany(l2 => l2.Elements("Level3"));
于 2013-09-18T09:15:42.673 回答
0

像这样的东西(未经测试):

from item in _documentRoot.Descendants("Level1").Descendants("Level2")
where item.Attributes("id").First().Value == "1234"
select item.Descendants("Level3")
于 2013-09-18T08:55:20.623 回答
0
var res = from x in _documentRoot.Descendants("Level1").Descendants("Level2")
where x.Attributes("ID").FirstOrDefault(id=> id.Value=="12345") != null
select x.Descendants("Level3");
于 2013-09-18T09:31:36.497 回答
0
var res = from item
in _documentRoot.Descendants("Level1").Descendants("Level2")
where item.Attributes("id").First().Value == "12345"
select item.Descendants("Level3");
于 2013-09-18T08:58:04.283 回答
0
_documentRoot.Descendants("Level1")
             .Descendants("Level2")
             .Where(i => i.Attributes.Any(a => a.Value == "1234"))
             .SelectMany(i => i.Descendants("Level3"));

扩展方法对于将.SelectMany所有 Level3 后代连接到一个 IEnumerable 中很重要

于 2013-09-18T08:59:34.257 回答
0

id以防属性出现一些问题。

_root.Descendants("Level1")
     .Elements("Level2")
     .Where(T => T.Attributes("id").Any(W => W.Value == "12345"))
     .Elements("Level3");
于 2013-09-18T09:11:53.190 回答