gpt4 book ai didi

c# - 使用 LINQ 的递归查询

转载 作者:行者123 更新时间:2023-11-30 19:28:35 25 4
gpt4 key购买 nike

可以用 LINQ 写吗?我尝试使用 LINQ。但是,我认为它必须循环两次;首先验证 a 是否存在,然后遍历 qs

所以我想出了这段代码。

public a Traverse(List<q> qs,string id)
{

foreach (var q in qs)
{
if (q.as.Any(a => a.Id == id))
{
return q.as.First(a => a.Id == id);

}

foreach (var a in q.as)
{
var result =Traverse(a.qs, id);
if(result != null)
return result;
}
}
return null;
}

我正在从 XML 读取它,就像“q”有“a”,“a”有“q”以递归方式。

我需要找到属于 a 的唯一 ID。

我知道在其他线程上进行过讨论,但没有帮助。

编辑:这是 XML 片段

  <qs xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<qs>
<q>q 1</q>
<Id>1</Id>
<as>
<a>
<aprop>a</aprop>
<Id>a 1.1</Id>
<qs>
<q>
<q>q 1.1.1</q>
<Id>1.1.1</Id>
<as>
<a>
<a>a</a>
<Id>a 1.1.1.1</Id>
<qs />
<type>1</type>
</a>
<a>
<a>a</a>
<Id>a 1.1.1.2</Id>
<qs />
<type>1</type>
</a>
</as>
</q>
<q>
<q>q 1.1.2</q>
<Id>1.1.2</Id>
<as>
<a>
<a>a</a>
<Id>a 1.1.2.1</Id>
<qs />
<type>1</type>
</a>
<a>
<a>a</a>
<Id>a 1.1.2.2</Id>
<qs />
<type>1</type>
</a>
</as>
</q>

最佳答案

我不确定您真正要实现的目标。这就是我对问题的理解:

We are looking for <a> tag, that contains another tag named <Id> with value equals to id given as a method parameter. If element is not found method should return null.

我认为可以使用 Descendants() 在 XML 上完成方法:

比方说,我们将您的 XML 加载到一个名为 doc 的变量中,它是 XDocument 的一个实例类(class)。

var query= from a in doc.Descendants("a")
let i = (string)a.Element("Id")
where i == id
select a;

return query.FirstOrDefault();

关于c# - 使用 LINQ 的递归查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14989119/

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