我得到了如下的XML节点。
...
<ParentNode>
<Node id="2343" name="some name" mode="Some Mode">
//Some child nodes here
</Node>
<Node id="2344" name="some other name" mode="Some Mode">
//Some child nodes here
</Node>
...
</ParentNode>
<ParentNode>
<Node id="2343" name="some name" mode="Some Other Mode">
//Some child nodes here
</Node>
<Node id="2344" name="some other name" mode="Some Mode">
//Some child nodes here
</Node>
</ParentNode>
....
我需要的是
id name distinct-mode-count
--------------------------------------------
2343 some name 2
2344 some other name 1
我在下面试过了。
XElement myXML = XElement.Load(filePath);
IEnumerable<XElement> parentNodes = myXML.Descendants("ParentNode");
var nodeAttributes = parentNodes.Select(le => le.Descendants("Node")
.GroupBy(x => new {
id = x.Attribute("id").Value,
name = x.Attribute("name").Value
}).Select(g => new {
id = g.Key.id,
name = g.Key.name,
distinct_mode_count = // This is where I am stuck
}));
我不知道如何在上面的查询中获得distinct_mode_count
。
编辑
我需要属性"mode"
的不同属性值计数,而不管它们在哪个ParentNode
中。
1条答案
按热度按时间rvpgvaaj1#
假设你想要在具有相同ID/名称的节点中计算不同的“mode”属性值,你只需要从组中的每个元素投影到模式,然后获取这些模式的不同序列,然后计算它:
您只需要计算组的个数,并使用
SelectMany
来“扁平化”父节点(或者仅使用myXml.Descendants("Node")
开始)。简短但完整的例子,给出了你想要的结果:
或者: