DataTable写sql实现groupby

前言:

最近经常处理Excel,读取Excel数据放在代码中一般都会存为DataTable中,故而处理DataTable比较多。

正文:

我的需求是:一个表里面找到其中三列完全相同的那些行。 比如北京每一列的数据都是相同的,取出来。

第一步:

获取那几列数据,存到Datable中。

第二部:

处理DataTable,那么这种需求首先想到的是用sql,group by 语法就能解决,转换为sql的思路去实现。

第三步:

上代码

        public static void GetMm()
        {
            DataTable dt = new DataTable("cart");
          
            DataColumn dc1 = new DataColumn("areaid", Type.GetType("System.String"));
            DataColumn dc2 = new DataColumn("house", Type.GetType("System.String"));
            DataColumn dc3 = new DataColumn("seq", Type.GetType("System.String"));
            DataColumn dc4 = new DataColumn("remark", Type.GetType("System.String"));

            dt.Columns.Add(dc1);
            dt.Columns.Add(dc2);
            dt.Columns.Add(dc3);
            dt.Columns.Add(dc4);

            DataRow dr = dt.NewRow();
            dr["areaid"] = "北京";
            dr["seq"] = "第一期";
            dr["remark"] = "货到付款";
            dt.Rows.Add(dr);

            DataRow dr1 = dt.NewRow();
            dr1["areaid"] = "北京";
            dr1["seq"] = "第一期";
            dr1["remark"] = "货到付款";
            dt.Rows.Add(dr1);
            DataRow dr2 = dt.NewRow();
            dr2["areaid"] = "上海";
            dr2["seq"] = "第二期";
            dr2["remark"] = "货到付款";
            dt.Rows.Add(dr2);
            DataRow dr3 = dt.NewRow();
            dr3["areaid"] = "上海";
            dr3["seq"] = "第四期";
            dr3["remark"] = "货到付款";
            dt.Rows.Add(dr3); 
         

            var query = from t in dt.AsEnumerable()
                        group t by new { t1 = t.Field<string>("areaid"), t2 = t.Field<string>("seq"), t3 = t.Field<string>("remark") } into m
                        select new
                        {
                            areaid = m.Key.t1,
                            seq = m.Key.t2,
                            remark = m.Key.t3,
                            rowcount = m.Count()
                        };
             
            foreach (var item in query.ToList())
            {
                if (item.rowcount > 1)
                {
                    //MessageBox.Show(item.areaid + "---" + item.house); 
                    Console.WriteLine(item.areaid + "---" + item.seq + "---" + item.remark + "---" + item.rowcount);
                    Console.WriteLine("\r\n");
                }
                //Console.WriteLine(item.areaid + "---" + item.seq + "---" + item.rowcount);
                //Console.WriteLine("\r\n");
            }

        }

结果:把重复的内容数据,并且输出重复的个数。 当然我的需求是把这些数据拿到然后附加的历史表里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值