利用Relations实现多DataTable的聚合

ContractedBlock.gifExpandedBlockStart.gifCode
/// <summary>
/// 对DataTable进行GroupBy操作
/// </summary>
/// <param name="p_table"></param>
/// <param name="p_key"></param>
/// <returns></returns>
private static DataTable GetTableByGroupBy(DataTable p_table, string p_key, string p_colname)
{
    
//对DataTable进行Group by
    DataTable parTable = new DataTable();
    DataColumn key 
= new DataColumn();
    key.DataType 
= System.Type.GetType("System.String");
    key.ColumnName 
= "MC";
    parTable.Columns.Add(key);

    DataColumn avg 
= new DataColumn();
    avg.DataType 
= System.Type.GetType("System.Double");
    avg.ColumnName 
= "AVG";
    parTable.Columns.Add(avg);
    
foreach (DataRow row in p_table.Rows)
    {
        
if (parTable.Select(string.Format("mc='{0}'", row[p_key].ToString())).Length == 0)
        {
            parTable.Rows.Add(
new object[] { row[p_key] })["mc"= row[p_key].ToString();
        }
    }

    DataSet ds 
= new DataSet();
    DataTable childTable 
= p_table.Copy();
    childTable.TableName 
= "child";
    ds.Tables.Add(childTable);
    parTable.TableName 
= "par";
    ds.Tables.Add(parTable);
    ds.Relations.Add(
"partochild", parTable.Columns["mc"], childTable.Columns[p_key]);
    parTable.Columns[
"avg"].Expression = string.Format("avg(child(partochild).{0})", p_colname);

    
return parTable;
}

转载于:https://www.cnblogs.com/lne818/archive/2009/03/11/1409075.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值