Я хочу преобразовать массив DataRow
в DataTable
... Каков самый простой способ сделать это?
Простой способ преобразования массива datarow в datatable
Ответ 1
Почему бы не перебрать ваш массив DataRow и не добавить (используя DataRow.ImportRow, если необходимо, чтобы получить копию DataRow), например:
foreach (DataRow row in rowArray) {
dataTable.ImportRow(row);
}
Убедитесь, что ваш dataTable имеет ту же схему, что и DataRows в вашем массиве DataRow.
Ответ 2
Для .Net Framework 3.5 +
DataTable dt = new DataTable();
DataRow[] dr = dt.Select("Your string");
DataTable dt1 = dr.CopyToDataTable();
Но если в массиве нет строк, это может привести к ошибкам, таким как Источник не содержит DataRows. Поэтому, если вы решите использовать этот метод CopyToDataTable()
, вы должны проверить массив, чтобы знать, что у него есть datarows или нет.
if (dr.Length > 0)
DataTable dt1 = dr.CopyToDataTable();
Ссылка доступна в MSDN: Метод DataTableExtensions.CopyToDataTable(IEnumerable)
Ответ 3
DataTable dt = new DataTable();
DataRow[] dr = (DataTable)dsData.Tables[0].Select("Some Criteria");
dt.Rows.Add(dr);
Ответ 4
Другой способ - использовать 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");
Ответ 5
Простой способ:
// 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());
Ответ 6
DataTable dt = myDataRowCollection.CopyToDataTable<DataRow>();
Ответ 7
DataTable dt = new DataTable();
foreach (DataRow dr in drResults)
{
dt.ImportRow(dr);
}
Ответ 8
Вот решение. Он должен работать нормально.
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);
}
Ответ 9
В любом случае это нужно для VB.NET:
Dim dataRow as DataRow
Dim yourNewDataTable as new datatable
For Each dataRow In yourArray
yourNewDataTable.ImportRow(dataRow)
Next
Ответ 10
.Net 3.5+ добавил DataTableExtensions, используйте DataTableExtensions.CopyToDataTable Method
Для массива datarow просто используйте .CopyToDataTable(), и он вернет datatable.
Для использования одного datarow
new DataRow[] { myDataRow }.CopyToDataTable()
Ответ 11
Вы можете использовать System.Linq следующим образом:
if (dataRows != null && dataRows.Length > 0)
{
dataTable = dataRows.AsEnumerable().CopyToDataTable();
}