2013-06-04 42 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