これをLINQで書くことは可能ですか?LINQを使ってみました。ただし、2回ループする必要があると思いました。最初に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;
}
「q」が「a」を持ち、「a」が「q」を再帰的に持つようなXMLから読んでいます。
に属する一意のIDを見つける必要がありますa
。
他のスレッドで議論があったことは知っていますが、役に立ちませんでした。
編集:これが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>