web-dev-qa-db-ja.com

データ行配列をデータテーブルに変換する簡単な方法

DataRow配列をDataTableに変換したい...これを行う最も簡単な方法は何ですか?

92
Nila

DataRow配列を反復処理して、(必要に応じてDataRow.ImportRowを使用してDataRowのコピーを取得する)を追加してください。

foreach (DataRow row in rowArray) {
   dataTable.ImportRow(row);
}

DataTableのスキーマがDataRow配列のDataRowsと同じであることを確認してください。

84
Jay Riggs

。Net Framework 3.5+の場合

DataTable dt = new DataTable();
DataRow[] dr = dt.Select("Your string");
DataTable dt1 = dr.CopyToDataTable();

ただし、配列に行がない場合、などのエラーが発生する可能性があります。ソースにはDataRowsが含まれていません。したがって、このメソッドCopyToDataTable()を使用する場合は、配列を調べて、データ行があるかどうかを確認する必要があります。

if (dr.Length > 0)
    DataTable dt1 = dr.CopyToDataTable();

MSDNで参照可能なリファレンス: DataTableExtensions.CopyToDataTable Method(IEnumerable)

177
joe

別の方法は、DataViewを使用することです

// Create a DataTable
DataTable table = new DataTable()
...

// Filter and Sort expressions
string expression = "[Birth Year] >= 1983"; 
string sortOrder = "[Birth Year] ASC";

// Create a DataView using the table as its source and the filter and sort expressions
DataView dv = new DataView(table, expression, sortOrder, DataViewRowState.CurrentRows);

// Convert the DataView to a DataTable
DataTable new_table = dv.ToTable("NewTableName");
10
ilans
DataTable dt = new DataTable(); 

DataRow[] dr = (DataTable)dsData.Tables[0].Select("Some Criteria");

dt.Rows.Add(dr);
10
Mitch Wheat

簡単な方法は:

// dtData is DataTable that contain data
DataTable dt = dtData.Select("Condition=1").CopyToDataTable();

// or existing typed DataTable dt
dt.Merge(dtData.Select("Condition=1").CopyToDataTable());
7
Zolfaghari
DataTable dt = new DataTable();
foreach (DataRow dr in drResults)
{ 
    dt.ImportRow(dr);
}   
4
user1036202
DataTable dt = myDataRowCollection.CopyToDataTable<DataRow>();
3
Miriam
DataTable Assetdaterow =
    (
        from s in dtResourceTable.AsEnumerable()
        where s.Field<DateTime>("Date") == Convert.ToDateTime(AssetDate)
        select s
    ).CopyToDataTable();
3
Rajenthiran T

これが解決策です。正常に動作するはずです。

DataTable dt = new DataTable();
dt = dsData.Tables[0].Clone();
DataRows[] drResults = dsData.Tables[0].Select("ColName = 'criteria');

foreach(DataRow dr in drResults)
{
    object[] row = dr.ItemArray;
    dt.Rows.Add(row);
} 
2
zaib shah

.Net 3.5+はDataTableExtensionsを追加し、DataTableExtensions.CopyToDataTableメソッドを使用します

データ行配列の場合は、.CopyToDataTable()を使用するだけで、datatableが返されます。

単一のデータ行で使用する場合

new DataRow[] { myDataRow }.CopyToDataTable()
1
Haseeb Mukhtar

VB.NETで誰もが必要とする場合:

Dim dataRow as DataRow
Dim yourNewDataTable as new datatable
For Each dataRow In yourArray
     yourNewDataTable.ImportRow(dataRow)
Next
1
logixologist

最初にDataテーブルの構造のクローンを作成してから、forループを使用して行をインポートする必要があります

DataTable dataTable =dtExisting.Clone();
foreach (DataRow row in rowArray) {
   dataTable.ImportRow(row);
}
0
Awais Shabir

System.Linqは次のように使用できます。

if (dataRows != null && dataRows.Length > 0)
{
   dataTable = dataRows.AsEnumerable().CopyToDataTable();
}
0
Andrés
DataTable dataTable = new DataTable();
dataTable = OldDataTable.Tables[0].Clone();
foreach(DataRow dr in RowData.Tables[0].Rows)
{
 DataRow AddNewRow = dataTable.AddNewRow();
 AddNewRow.ItemArray = dr.ItemArray;
 dataTable.Rows.Add(AddNewRow);
}
0
AVINASH DUBEY