对已经得到的DataTable进行分组

参考:http://social.msdn.microsoft.com/Forums/zh-CN/a5ae8993-c65a-4dbf-8417-42452c6ed76c/datasetdatatable-net

http://social.msdn.microsoft.com/Forums/zh-CN/1b0aafdd-2e51-46d5-8e25-87d4866ff4b6/datatable

大部分都是抄的!!


有写时候,我们已经从数据层得到了一个datatable,现在我们需要对某几列进行分组,比如对下面学生按照年龄和性别分组:


姓名     年龄       性别      学校

小明       12        男         光明小学

小红        12       女         光明小学

小米         12       男         黑暗小学

================================================

小明       12        男         光明小学

小米         12       男         黑暗小学

 

小红        12       女         光明小学


    class Program
    {
        static void Main(string[] args)
        {
            string connection = "*********** ";
            SqlConnection cn = new SqlConnection(connection);
            cn.Open();
            string selectCmd = "***************";
            DataSet ds = new DataSet();
            SqlDataAdapter adapter = new SqlDataAdapter(selectCmd, cn);
            adapter.Fill(ds, "*****");
            DataTable mytb = ds.Tables["***"];
            List<DataTable> groupsTb = DataTableGroups(new string[] { "你想要的列名", "*****" }, mytb);

            Console.Read();
        }//end  main


        public static void GroupDataRows(IEnumerable<DataRow> source,
            List<DataTable> destination, string[] groupByFields,
            int fieldIndex, DataTable schema)
        {
            if (fieldIndex >= groupByFields.Length || fieldIndex < 0)
            {
                DataTable dt = schema.Clone();
                foreach (DataRow row in source)
                {
                    DataRow dr = dt.NewRow();
                    dr.ItemArray = row.ItemArray;
                    dt.Rows.Add(dr);
                }

                destination.Add(dt);
                return;
            }

            var results = source.GroupBy(o => o[groupByFields[fieldIndex]]);
            foreach (var rows in results)
            {
                GroupDataRows(rows, destination, groupByFields, fieldIndex + 1, schema);
            }

            fieldIndex++;
        }

        public static List<DataTable> DataTableGroups(string[] fields, DataTable source)
        {
            List<DataTable> dts = new List<DataTable>();
            GroupDataRows(source.Rows.Cast<DataRow>(),dts,fields,0, source);
            return dts;
        }
    }//end  class



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值