gpt4 book ai didi

c# - 如何在查询 XML 时在 LINQ 中添加 OR 条件?

转载 作者:数据小太阳 更新时间:2023-10-29 01:51:17 24 4
gpt4 key购买 nike

问题:返回所有记录where Jon Doe =<bus_contact> <bus_sponsor> .

当前代码返回记录 1,那么需要做哪些修改才能使用一次查询返回记录 1 和 2?

XML

<root>
<row>
<project_id>1</project_id>
<project_name>Name1</project_name>
<bus_contact>Jon Doe</bus_contact>
<bus_sponsor>Bruce Wayne</bus_sponsor>
</row>
<row>
<project_id>2</project_id>
<project_name>Name2</project_name>
<bus_contact>Peter Parker</bus_contact>
<bus_sponsor>Jon Doe</bus_sponsor>
</row>
</root>

C#

class Program
{
static void Main (string[] args)
{
XElement main = XElement.Load ("master_list.xml");

var results = main.Descendants ("row")
.Descendants ("bus_contact")
.Where (e => e.Value == "Jon Doe")
.Select (e => e.Parent)
.Select (e => new {
project_id = e.Descendants ("project_id").FirstOrDefault ().Value,
project_name = e.Descendants ("project_name").FirstOrDefault ().Value
});

foreach (var result in results)
Console.WriteLine ("{0}, {1}", result.project_id, result.project_name);
Console.ReadLine ();
}
}

编辑:这与可能的重复链接中指出的问题不完全相同。是的,它部分地提到了这一点,但对于初学者来说,在接受的答案提供的适当背景下获得答案是非常有帮助的。

最佳答案

||Any 结合使用,如下所示:

var results = main.Descendants("row")
.Where(r =>
r.Descendants("bus_contact").Any(c => c.Value == "Jon Doe")
|| r.Descendants("bus_sponsor").Any(c => c.Value == "Jon Doe")
);

使用 Any 可以让您根据子级的条件进行查询,而无需实际下降到子级。这消除了通过选择 Parent 爬回树的必要性。

关于c# - 如何在查询 XML 时在 LINQ 中添加 OR 条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38856401/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com