2

どちらも似ている 2 つのドキュメントがありますが、2 つのファイルを比較し、ドキュメント #2 には存在しないドキュメント #1 の値を返すためのエレガントで効率的な方法を見つける必要があります。

XML ドキュメント #1

      <ids>
        <id>1</id>
        <id>2</id>
        <id>5</id>
        <id>6</id>
        <id>7</id>
        <id>8</id>
        <id>9</id>
       </ids>
    </ids>

XML ドキュメント #2

  <ids>
    <id>1</id>
    <id>2</id>
    <id>7</id>
    <id>8</id>
    <id>9</id>
  </ids>

この2つの文書をidフィールドで結合できればlinqを使おうと考えていました。より良い方法はありますか?ID # 5 と 6 を返したいと思っています。

4

1 に答える 1

6

これは私が動作することがわかっているサンプルです。小さなファイルでのみ試してみました (File1.xml には 20 個のアイテムがあり、File2.xml には 8 個のアイテムがありました)。

XDocument file1Doc = XDocument.Load("File1.xml");
XDocument file2Doc = XDocument.Load("File2.xml");

IEnumerable<string> file1Elements = from d in file1Doc.Descendants("Id")
                                    select d.Value;

IEnumerable<string> file2Elements = from d in file2Doc.Descendants("Id")
                                    select d.Value;

var difference = file1Elements.Except(file2Elements);

あるいは、あなたが求めるものとよりインラインである可能性があります:

XDocument file1Doc = XDocument.Load("File1.xml");
XDocument file2Doc = XDocument.Load("File2.xml");

IEnumerable<string> file2Elements = from d in file2Doc.Descendants("Id")
                                    select d.Value;

var x = from include in file1Doc.Descendants("Id")
        where file2Elements.Contains(include.Value) != true
        select include;

また、MSDN の 101 LINQ Samples を参照してください。

于 2009-02-07T01:04:47.653 に答える