Linq to XML Query を作成しようとしていますが、実際の解決策はまだ見つかりません。
ここに私のXMLがあります
<Nodes>
<Node Text="Map" Value="Map">
<Node Text="12YD" Value="12YD">
<Node Text="PType" Value="PType">
<Node Text="12" Value="12" />
</Node>
<Node Text="SType" Value="SType">
<Node Text="2" Value="2" />
</Node>
</Node>
<Node Text="12YP" Value="12YP">
<Node Text="PType" Value="PType">
<Node Text="12" Value="12" />
</Node>
<Node Text="SType" Value="SType">
<Node Text="1" Value="1" />
</Node>
</Node>
</Node>
</Nodes>
使用できるパラメーターは PType ノードと SType ノード用で、これらの値に応じて、親ノードの属性値を取得する必要があります。
Example:
Params: {PType:12}, {SType:2} should give me 12YD as a result.
Params: {PType:12}, {SType:1} should give me 12YP as a result.
PredicateBuilder を使用してもさまざまなソリューションを試しましたが、成功しませんでした。どんな助けでも大歓迎です。
これがLinqPadを使用した最新のコードです。
void Main()
{
var xml = XElement.Load (@"C:\map.xml");
string value = "{PType:12},{SType:1}";
string[] mapReqValues = value.Split(',');
var predicate = PredicateBuilder.False<XElement>();
foreach (string r in mapReqValues)
{
var m = Regex.Match(r, @"{([^}]+)}").Groups[1].Value.Split(':');
predicate = predicate.Or(p => p.Attribute("Value").Value == m[0] &&
p.Descendants().Attributes("Value").FirstOrDefault().Value == m[1]);
}
var result = xml.Descendants().AsQueryable().Where(predicate);
result.Dump();
}