如何在不知道使用LINQ的XML名称的情况下获取节点的第一个后代

时间:2011-06-27 15:22:11

标签: linq

我有一个类似于这样的XML字符串:

<FIXML>
    <T TrdTyp = "1" etc/>
</FIXML>


<FIXML>
    <X TrdTyp = "0" etc/>
</FIXML>

请注意,FIXML的第一个后代的名称可以是任何名称,在这个简短的示例中,它可以是T或X.我需要访问属性TrdType来计算出现次数。

在不知道FIXML后代的名称的情况下,执行此操作的正确LINQ查询是什么?

如果我知道后代的名字,这是有效的,但只有那些是T,我会想念X:

var t =
from el in clearingMessagesDoc.Elements("ClearingMessages").Elements("FIXML").Elements("T")
let trdtyp = el.Attribute("TrdTyp").Value
group trdtyp by trdtyp.Trim() into g
orderby g.Key descending
select new { 
TrdType = g.Key,
Count = g.Count() 
};

因此,对于“0”计数为1,对于“1”

计数为1

谢谢。

1 个答案:

答案 0 :(得分:1)

这个怎么样:

var t =
    from el in clearingMessagesDoc.Elements("ClearingMessages")
        .Elements("FIXML")
        .Elements()
        .First(e => e.Attribute("TrdTyp") != null)
    let trdtyp = el.Attribute("TrdTyp").Value
    group trdtyp by trdtyp.Trim() into g
    orderby g.Key descending
    select new { 
        TrdType = g.Key,
        Count = g.Count() 
    };