web-dev-qa-db-de.com

Einfache Möglichkeit zum Konvertieren von Datenfeldern in datierbare

Ich möchte ein DataRow-Array in DataTable konvertieren. Was ist der einfachste Weg, dies zu tun?

87
Nila

Warum iterieren Sie nicht durch Ihr DataRow-Array und fügen Sie (mithilfe von DataRow.ImportRow, falls erforderlich, um eine Kopie der DataRow zu erhalten) Folgendes hinzu:

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

Stellen Sie sicher, dass Ihre dataTable das gleiche Schema hat wie die DataRows in Ihrem DataRow-Array.

79
Jay Riggs

Für .Net Framework 3.5 und höher

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

Wenn das Array keine Zeilen enthält, kann dies zu Fehlern wie Die Quelle enthält keine DataRows führen. Wenn Sie sich für diese Methode CopyToDataTable() entscheiden, sollten Sie daher überprüfen, ob das Array Datenzeilen hat oder nicht. 

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

Referenz unter MSDN verfügbar: DataTableExtensions.CopyToDataTable-Methode (IEnumerable)

175
joe

Eine andere Möglichkeit ist die Verwendung einer 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

Einfacher Weg ist:

// 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 = myDataRowCollection.CopyToDataTable<DataRow>();
3
Miriam
DataTable dt = new DataTable();
foreach (DataRow dr in drResults)
{ 
    dt.ImportRow(dr);
}   
3
user1036202

Hier ist die Lösung. Es sollte gut funktionieren.

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+ hinzugefügt DataTableExtensions, verwenden Sie die DataTableExtensions.CopyToDataTable-Methode 

Verwenden Sie für datarow array einfach .CopyToDataTable () und es wird datable zurückgegeben.

Für einzelne Datarow-Nutzung 

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

Falls jemand es in VB.NET braucht:

Dim dataRow as DataRow
Dim yourNewDataTable as new datatable
For Each dataRow In yourArray
     yourNewDataTable.ImportRow(dataRow)
Next
1
logixologist
DataTable Assetdaterow =
    (
        from s in dtResourceTable.AsEnumerable()
        where s.Field<DateTime>("Date") == Convert.ToDateTime(AssetDate)
        select s
    ).CopyToDataTable();
1
Rajenthiran T

Sie müssen zuerst die Struktur der Datentabelle klonen und dann die Zeilen mit der for-Schleife importieren

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

Sie könnten System.Linq folgendermaßen verwenden:

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