使用下面的列表:
<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 运算符时,当然我返回了太多元素。
这里有人可以给建议吗?
您可以使用
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();