XElement - 查找具有两个不同子值的节点

问题描述 投票:0回答:1

使用下面的列表:

<People>
    <Continent>Asia</Continent>
    <TimeZone>Hong Kong Standard Time</TimeZone>
    <Person>
        <FirstName>Joe</FirstName>
        <LastName>Stevenson</LastName>
    </Person>
    <Person>
        <FirstName>Joe</FirstName>
        <LastName>Hancock</LastName>
    </Person>
    <Person>
        <FirstName>Kirby</FirstName>
        <LastName>Stevenson</LastName>
    </Person>
</People>

我想使用一些 XElement LINQ 来选择包含 Joe Stevenson 的名字和姓氏的节点。我在这里尝试了以下代码:

string trimmedFirstName = "Joe";
string trimmedLastName = "Stevenson";
List<XElement> peopleChildren = convertedPayload.Descendants("Person").Where(a => a.Value.Contains(trimmedFirstName)
                && a.Value.Contains(trimmedLastName)).ToList();

但是当我使用上面的代码时,我相信我什么也没有返回,因为我试图检查单个值。我想按值进行选择,与 XElement 名称无关(因此我应该能够检查,例如,某人的姓氏为“Joe”,名字为“Stevenson”,以便我可以将其更正为实际的我的原始数据的名字和姓氏)。

当我在上面的 LINQ 中使用 OR 运算符时,当然我返回了太多元素。

这里有人可以给建议吗?

c# linq linq-to-xml
1个回答
0
投票

您可以使用

Element
方法来缩小元素名称范围。以下应该有效。

        string trimmedFirstName = "Joe";
        string trimmedLastName = "Stevenson";
        List<XElement> peopleChildren = convertedPayload.Descendants("Person")
            .Where(a => a.Element("FirstName").Value.Contains(trimmedFirstName)
                        && a.Element("LastName").Value.Contains(trimmedLastName)).ToList();
© www.soinside.com 2019 - 2024. All rights reserved.