データテーブルの同一判定

いつも参考にさせていただいております。

毎週同じ条件を検索し、更新情報を確認したいと思っております。
無題

前回データ:LastDT
今回データ:ExtractDataTable
以下の式で前回と同一か否かを判定させることまではできました。
LastDT.AsEnumerable.SequenceEqual(ExtractDataTable.AsEnumerable, DataRowComparer.Default)

これにもう一歩踏み込んで、何が変わったかを表示したいと考えております。
特に注意したいのは、URLは同じでも価格が変更した場合などです。
わかりやすい方法があればご教示いただけないでしょうか。
よろしくお願いいたします。

こんにちは

ここまで出来たらが素晴らしいです。次にも簡単ができると思ういます。

これは SequenceEqualの逆的のメソッド使ったら解決できるじゃないですか?
ちなみに以下になります。まぁ ご参考までに
ExtractDataTable.AsEnumerable.Except(LastDT.AsEnumerable, System.Data.DataRowComparer.Default)
上記のコードは今回のデータ(ExtractDataTable)と前回のデータ(LastDT)が変わったというデータが同じじゃない(ごめん日本語が正しくないと思います 笑)ところがあれば差異行を取得します。

1 Like

nguyendinhduc269様

ご回答ありがとうございます。
datatable同士の比較は、このForum上で同じようなやりとりの式を拝借したものです。

AsEnumerableについてわかっておらず恐縮ですが、いただいた式ですと下記のように表示されました。

無題

AsEnumerable.SequenceEqualと、AsEnumerable.Exceptの違いだと思うのですが、
LastDTとExtractDataTableの型を変更しなければいけないのでしょうか?

ヒントを下さったら幸いでございます。

Ifの条件なのでTrue or Falseの価値を設定しなければならないですね。

ExtractDataTable.AsEnumerable.Except(LastDT.AsEnumerable, System.Data.DataRowComparer.Default)

これだとDataTableの型なので条件にならないですね。
ちょっと考えてみると変わったのデータが有るというのは上記のDataTableのRow > 0 じゃなですか?
それだったらデータが変わった場合の条件は以下になりますね

ExtractDataTable.AsEnumerable.Except(LastDT.AsEnumerable, System.Data.DataRowComparer.Default).Count > 0

変わったデータを取得したい場合は

changedDT = ExtractDataTable.AsEnumerable.Except(LastDT.AsEnumerable, System.Data.DataRowComparer.Default).CopyToDataTable()

コードが足りなかった申し訳ないねー

nguyendinhduc269様

ご回答ありがとうございます!
いただいた式で期待通りの結果を得ることができました。

データが変わったかをまず条件分岐とし、変わったデータをchangedDTとして持たせるやり方はこれからも重宝します。

本当に助かりました。ありがとうございます!

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.