3

ある DataTable の DataRow が別の DataTable に存在するかどうかを確認したいと考えています。

2 つの DataTables があります。同じで、両方に存在する DataRows がいくつかあります。毎回どの列があるかを知っていれば、これはとても簡単ですが、わかりません。の線に沿って何かを使用して...

datatable.Rows[i].Field <String> columnName);

このフィールドは整数、文字列、または日付/時刻になる可能性があるため、機能しません。ただし、2つのファイルが同じ列名を共有していることは知っています。

私のコードはバラバラですが、今のところはこんな感じです。今は列名のリストを生成していますが、それだけです。

for (var h = 0; h < origDbfFile.datatable.Columns.Count; h++) {

     columnNames.Add(origDbfFile.datatable.Columns[h].ColumnName);

}

ループの悪夢が進行中です。誰かがよりクリーンな解決策を見つけることができれば、それは大歓迎です!

for (int g = 0; g < origDbfFile.dataset.Tables[0].Rows.Count; g++)
{

     for (int h = 0; i < modDbfFile.dataset.Tables[0].Columns.Count; h++)
     {
           foreach (String columnName in columnNames)
           {
           String rowValue = origDbfFile.dataset.Tables[0].Rows[g].Field<String>(Convert.ToString(columnName));
           //test data
           result += "Column name: &nbsp: " + columnName + "<br/>";
           result += "Value &nbsp; " + rowValue + "<br/><br/>";
           //if logic will go below

            }

      }

 }
4

3 に答える 3

2

私の解決策は、値を整数、文字列、または日付/時刻としてではなく、一般的なオブジェクトとして取得することでした。次に、それを文字列に変換し、文字列であるかのように比較します。

//check each column name for a change
foreach (String columnName in columnNames)
{
    //this grabs whatever value is in that field                            
    String origRowValue = "" + origRow.Field<Object>(columnName);
    String modRowValue = "" + modRow.Field<Object>(columnName);

    //check if they are the same
    if (origRowValue.Equals(modRowValue))
    {
        //if they aren the same, increase the number matched by one
        numberMatched++;
        //add the column to the list of columns that don't match

    }
    else
    {
        mismatchedColumns.Add(columnName);
    }

}

賢い解決策か何か?みんな助けてくれてありがとう:)

于 2013-05-28T16:53:54.193 に答える