C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: DataTable1 と DataTable2 を比較


(過去ログ 107 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■63998 / inTopicNo.1)  DataTable1 と DataTable2 を比較
  
□投稿者/ ante (5回)-(2012/11/01(Thu) 17:39:24)

分類:[.NET 全般] 

環境:ASP.NET VB.NET VisualStudio2010

◆やりたいこと。

DataTable1 と DataTable2 を比較して、その差分のみを取得したい。
LINQで行けそうな気がしたのですが、実現に至っていません。

このURLを参考にしましたが、差分があってもFalse(差分無し)で返却されます。。。
http://perutago.seesaa.net/article/254209962.html

泥臭く、DataTable1 と DataTable2をLoopで回しても別にいいっちゃいいのですが、
流行りのLINQもしくは、別の実現方法があるのならば、それでやりたいと思っています。

叡智ある皆様に是非、ご教授いただけたら幸いです。

引用返信 編集キー/
■63999 / inTopicNo.2)  Re[1]: DataTable1 と DataTable2 を比較
□投稿者/ ante (6回)-(2012/11/01(Thu) 17:43:11)
書き忘れてました。

DataTable1 と DataTable2 は全く同じ構造(列)です。
値だけ異なっている想定です。
引用返信 編集キー/
■64001 / inTopicNo.3)  Re[2]: DataTable1 と DataTable2 を比較
□投稿者/ ante (8回)-(2012/11/01(Thu) 18:29:22)
2012/11/01(Thu) 18:31:21 編集(投稿者)
DataTable1は[pDtMoto]
DataTable2は[pDtSaki]

これで差分が取れました。

    Private Function GetDifference(pDtMoto As DataTable, pDtSaki As DataTable) As Object

        Dim q1 = From Moto In pDtMoto.AsEnumerable() _
              Join Saki In pDtSaki.AsEnumerable() _
              On Moto!SYSLGTRNNO Equals Saki!SYSLGTRNNO _
              Where Moto!DEFAULT_CHK <> Saki!DEFAULT_CHK _
              Select New With {Saki!DEFAULT_CHK, Saki!SYSLGTRNNO}

        For Each o In q1
            Console.WriteLine("{0}, {1}", o.DEFAULT_CHK, o.SYSLGTRNNO)
        Next

        Return q1

    End Function

ただ、オブジェクト型なんですよね。。
なんかそもそもLINQを理解できてない気がしてきたのだ (_・v・_)

引用返信 編集キー/
■64008 / inTopicNo.4)  Re[3]: DataTable1 と DataTable2 を比較
□投稿者/ ante (9回)-(2012/11/01(Thu) 23:28:06)
そもそもObject型ではなくじぇねりっくこれくしょん定義でした。

需要無いと思いますが念のためご報告。

    Private Function GetDiffDataTable(pDtMoto As DataTable, pDtSaki As DataTable) As DataTable

        Dim q1 = From Moto In pDtMoto.AsEnumerable() _
              Join Saki In pDtSaki.AsEnumerable() _
              On Moto!SYSLGTRNNO Equals Saki!SYSLGTRNNO _
              Where Moto!DEFAULT_CHK <> Saki!DEFAULT_CHK _
              Select New With {Saki!DEFAULT_CHK, Saki!SYSLGTRNNO}


        ' 列情報を組立て
        Dim dt = New DataTable()
        dt.Columns.Add("DEFAULT_CHK", Type.GetType("System.Int32"))
        dt.Columns.Add("SYSLGTRNNO", Type.GetType("System.Int64"))

        For Each o In q1
            Dim dtRow As DataRow = dt.NewRow
            dtRow("DEFAULT_CHK") = o.DEFAULT_CHK
            dtRow("SYSLGTRNNO") = o.SYSLGTRNNO

            'Console.WriteLine("{0}, {1}", o.DEFAULT_CHK, o.SYSLGTRNNO)
            dt.Rows.Add(dtRow)
        Next

        Return dt

    End Function

ご参照いただいた方ありがとうございました☆

解決済み
引用返信 編集キー/
■64010 / inTopicNo.5)  Re[4]: DataTable1 と DataTable2 を比較
□投稿者/ Hongliang (14回)-(2012/11/02(Fri) 10:01:00)
2012/11/02(Fri) 10:01:17 編集(投稿者)

> このURLを参考にしましたが、差分があってもFalse(差分無し)で返却されます。。。
> http://perutago.seesaa.net/article/254209962.html
このメソッドはDataTableEqualなのですから、差があったら(等しくないので)falseを返すのは正しい動作でしょう。

Return pDtMoto.Rows.Cast(Of DataRow)().Except(pDtSaki.Rows.Cast(Of DataRow)(), DataRowComparer.Default).CopyToDataTable()
こんな感じで間に合いませんかね。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -