2013-06-04 39 views
0

我想要合併DataTable s在列表中使用總和或平均值取決於條件。例如:將數據表與條件合併

private DataTable getData(List<DataTable> datas, string[] KeyColumnNames, string valueCol) 
{ 
    List<DataTable> dataTables = datas; 
    //if datas has 3 dataTables in it : dt1, dt2, dt3 
    // then I want to create another dataTable dtAll which will have the sum of 
    // valueCol of all three datatables for the row which will be conditioned using 
    // KeyColumnNames (can be multiple Primary keys) 
    return dataTable; 
} 

考慮所有的數據表,因爲它們是從類似的模式,但不同的數據中心的表是完全一樣的,但不同的值。 謝謝。

+0

考慮使用LINQ它有能力聚合以及聯合。 –

回答

1

我會做

List<DataTable> dataTableList = dtList; 
DataTable unionDataTable = new DataTable(); 
for(int i = 0; i < dtList.Count; i++) 
    unionDataTable = Union(unionDataTable, dtList[i], "UnionDataTable"); 

其中Union方法是通過類似下面的

public static DataTable Union(DataTable First, DataTable Second, string strReturnedTableName) 
{ 
    // Result table. 
    DataTable table = new DataTable(strReturnedTableName); 

    // Build new columns. 
    DataColumn[] newcolumns = new DataColumn[First.Columns.Count]; 
    for (int i = 0; i < First.Columns.Count; i++) 
     newcolumns[i] = new DataColumn(First.Columns[i].ColumnName, First.Columns[i].DataType); 

    // Add new columns to result table. 
    table.Columns.AddRange(newcolumns); 
    table.BeginLoadData(); 

    // Load data from first table. 
    foreach (DataRow row in First.Rows) 
     table.LoadDataRow(row.ItemArray, true); 

    // Load data from second table. 
    foreach (DataRow row in Second.Rows) 
     table.LoadDataRow(row.ItemArray, true); 

    table.EndLoadData(); 
    return table; 
} 

我希望這有助於定義。

編輯。您可以將Action傳入該方法,並在foreach塊中使用此方法來執行所需操作。

+0

這隻會合並數據,我需要對數據執行操作。像unionDataTable的列值將具有來自所有表的值的總和或平均值。 – Ratan

+1

請參閱編輯。我不能爲你寫出整個代碼,但上面應該是一個好的開始...... – MoonKnight