2つのDataTablesをマージする

私はこれらのフィールドを持つ2 Datatableを持っています:

DataTable1

Hour - Value1
0 - 34
1 - 22
2 - NULL
3 - 12
..
..
23 - 10

DataTable2

Hour - Value1
0 - NULL
1 - 22
2 - 35
3 - 11
..
..
23 - NULL

I need to populate an unique DataTable that has the same "Hour" fields (the hours of the day) and for the values has to get the values from DataTable1if is not null. If the values in DataTable1is null, I have to take the correspondet values from DataTable2. If also the value from DataTable2 is null, I have to log the error.

私の例では、私は取得する必要があります:

DataTableResult

Hour - Value1
0 - 34
1 - 22
2 - 35
3 - 12
..
..
23 - 10

どのように私はこれを得ることができますか?

0

2 答え

これは、foreach文で各要素を処理する必要がある単純な条件付き論理に従う質問です。

行の要素にnullがあるたびに、これを処理する必要があります。 あなたはdatatable 2のその行に行き、それが値を持っているかどうかをチェックします。 データテーブル1。 これが失敗した場合は、エラーがスローされます。 私はこの比較方法のリンクを提供していますが、本当にあなたはこれが必要なわけではありません。行内のフィールドにはnullがあります。

1
追加された

Linqをオブジェクトに使用し、dataTable1とdataTable2が同じ列を持つと仮定します。

var hoursMap1 = dataTable1.Rows.Cast().ToDictionary(row => row[0]);
var hoursMap2 = dataTable2.Rows.Cast().ToDictionary(row => row[0]);

var resultTable = new DataTable();

// Clone the column from table 1
for (int i = 0; i < dataTable1.Columns.Count; i++)
{
  var column = dataTable1.Columns[i];
  resultTable.Columns.Add(column.ColumnName, column.ColumnType);
}

foreach (var entry in hoursMap1)
{
  int hours = entry.Key;
  DataRow row1 = entry.Value;
  DataRow row2 = null;
  if (!hoursMap2.TryGetValue(hours, out row2))
  {
   //Hours in table 1 but not table 2, handle error
  }

  var fields = new object[resultTable.Columns.Count];
  int fieldIndex = 0;
  fields[fieldIndex++] = hours;

  for (int i = 1; i < row1.ItemsArray.Length; i++)
  {
    var field1 = row1.ItemsArray[i];
    var field2 = row2.ItemsArray[i];
    var newField = field1 ?? field2;
    if (newField == null)
    {
     //Field neither in table 1 or table 2, handle error
    }

    fields[fieldIndex++] = newField;
  }

  resultTable.Rows.Add(fields);
}
1
追加された
@Ciupazどの2番目の例は、私は1つだけ書いた??ところで、.netフレームワークのバージョンはあなたですか?
追加された 著者 vc 74,
どうもありがとうございます。 2番目の例を試してみましょう。ルイージ
追加された 著者 Ciupaz,