3

ここに私のxmlファイルがあります:

<items>
  <item code="1">
    <info1>LOREM</info1>
    <info2>IPSUM</info2>
    <info3>DOLOR</info3>
  </item>
  <item code="2">
    <info1>LOREM</info1>
    <info2>AMET</info2>
    <info3>CONSECTETUER</info3>
  </item>
  <item code="3">
    <info1>LOREM</info1>
    <info2>IPSUM</info2>
    <info3>CONSECTETUER</info3>
  </item>
</items>

その辞書に保存されている基準に基づいて、いくつかの項目コードを抽出したい:

{ "info1", "LOREM" }
{ "info2", "IPSUM" }

私はそのlinqクエリを書きました:

var test =  from element in xml.Descendants("item").Elements()
        from param in dicoParams
        where param.Key == element.Name.ToString() && param.Value == element.Value
        select element.Parent.Attribute("code");

しかし、出力は次のとおりです。

code="1"
code="1"
code="2"
code="3"
code="3"

そして私が期待したのは:

code="1"
code="3"

クエリが少なくとも 1 つの条件を満たす要素を返したことがわかりますが、両方の条件を満たす必要があります。

どうすればそのクエリを書くことができますか?

4

3 に答える 3

0
 var test1 = (from element in elem.Descendants().Elements()
                         from item in val
                         where item.Key == element.Name.ToString() && item.Value == element.Value
                         select element.Parent.Attribute("code")).GroupBy(t => t.Parent.Attribute("code"));

group by も使用できます

于 2013-06-05T11:03:39.320 に答える
0

このようなものが動作するはずです:

var test =
    from element in xml.Descendants("item")
    where element.Elements()
        .Any(x =>
            dicoParams.ContainsKey(x.Name.ToString())
            && dicoParams[x.Name.ToString()] == x.Value)
    select element.Attribute("code");

しかし、他の人が指摘したように、要素「2」はあなたが提供したデータと一致します。

于 2013-06-05T10:59:38.840 に答える