C# datatable使用groupby进行分组统计

时间:2025-04-23 07:48:28
 DataTable dt = new DataTable ( "cart" ) ;
            DataColumn dc1 = new DataColumn ( "areaid", Type . GetType ( "" ) ) ;
            DataColumn dc2 = new DataColumn ( "house", Type . GetType ( "" ) ) ;
            DataColumn dc3 = new DataColumn ( "seq", Type . GetType ( "" ) ) ;
            DataColumn dc4 = new DataColumn ( "remark", Type . GetType ( "" ) ) ;
       
            dt . Columns . Add (dc1 ) ;
            dt . Columns . Add (dc2 ) ;
            dt . Columns . Add (dc3 ) ;
            dt . Columns . Add (dc4 ) ;

            DataRow dr = dt . NewRow ( ) ;
            dr [ "areaid" ] = "北京" ;
            dr [ "house" ] = "北京仓库" ;
            dr [ "seq" ] = "2" ;
            dr [ "remark" ] = "货到付款" ;
            dt . Rows . Add (dr ) ;

            DataRow dr1 = dt . NewRow ( ) ;
            dr1 [ "areaid" ] = "北京" ;
            dr1 [ "house" ] = "上海仓库" ;
            dr1 [ "seq" ] = "1" ;
            dr1 [ "remark" ] = "货到付款" ;
            dt . Rows . Add (dr1 ) ;
            DataRow dr2 = dt . NewRow ( ) ;
            dr2 [ "areaid" ] = "上海" ;
            dr2 [ "house" ] = "上海仓库" ;
            dr2 [ "seq" ] = "1" ;
            dr2 [ "remark" ] = "货到付款" ;
            dt . Rows . Add (dr2 ) ;
            DataRow dr3 = dt . NewRow ( ) ;
            dr3 [ "areaid" ] = "上海" ;
            dr3 [ "house" ] = "北京仓库" ;
            dr3 [ "seq" ] = "1" ;
            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" ) } into m
                        select new
                        {
                            areaid = m . Key . t1,
                            seq = m . Key . t2,
                            house = m . First ( ) . Field < string > ( "house" ),
                            rowcount = m . Count ( )
                        } ;

             Console . WriteLine ( "区域 " + "  库房" + "   数量" ) ;
            foreach (var item in query . ToList ( ) )
            {
                if (item . rowcount > 1 )
                {
                    MessageBox . Show (item . areaid + "---" +item . house ) ;
                }
                Console . WriteLine (item . areaid + "---" +item . house + "---" +item . rowcount ) ;
                Console . WriteLine ( "\r\n" ) ;
            }