统计DataTable某列中,不同值各自出现的次数,该如何解决

统计DataTable某列中,不同值各自出现的次数
例如 dt中“列1”有5行,出现的值有相同的部分
想将值出现的次数存在对应行的“列2”中。
例如“dt.Rows[i]["列1"]中的值为依次为1、1、2、3、3
dt.Rows[i]["列2"]中的值依次为2、2、1、2、2。
------解决思路----------------------
var query = dt.Rows.Cast<DataRow>().GroupBy(x => x[1].ToString()).Select(x => x.Key + "出现了" + x.Count().ToString() + "次");
------解决思路----------------------

            DataTable 统计 = new DataTable();
            统计.TableName = "统计";
            统计.Columns.Add("统计", typeof(int));
            统计.Rows.Add(1);
            统计.Rows.Add(1);
            统计.Rows.Add(2);
            统计.Rows.Add(3);
            统计.Rows.Add(3);

            int[] 列值 = 统计.AsEnumerable().Select(数 => 数.Field<int>("统计")).ToArray();
            foreach (int 个 in 列值.Distinct())
                信息 += 个.ToString("值00个数:") + 列值.LongCount(列 => 列 == 个).ToString("00个。\n");
            MessageBox.Show(信息);

统计DataTable某列中,不同值各自出现的次数,该如何解决统计DataTable某列中,不同值各自出现的次数,该如何解决
------解决思路----------------------
1.数据库层面解决
如果你的是从数据库查询。
a.在查询那里加多1列,该列是一个count子查询;
b.先对原始查询分组计数,然后再将分组结果和原始查询做连接;

2.在内存层面,dataset/datatable
创建一个新的datatable,这个新的datatable多了1列,存放原datatable的分组统计

3.Linq
比如

DataTable dt = new DataTable();

            dt.Columns.Add("col1");

            DataRow dr1 = dt.NewRow();
            dr1[0] = 1;
            dt.Rows.Add(dr1);

            DataRow dr2 = dt.NewRow();
            dr2[0] = 1;
            dt.Rows.Add(dr2);

            DataRow dr3 = dt.NewRow();
            dr3[0] = 2;
            dt.Rows.Add(dr3);

            DataRow dr4 = dt.NewRow();
            dr4[0] = 3;
            dt.Rows.Add(dr4);

            DataRow dr5 = dt.NewRow();
            dr5[0] = 3;
            dt.Rows.Add(dr5);

            var newDT = dt.Rows.Cast<DataRow>().GroupBy(x => x[0].ToString()).Select(x => new {col1 = x.Key, col2 = x.Count()}).Select(r => r);

            var OldDT = dt.Rows.Cast<DataRow>().Select(x => new {col1=x[0].ToString(),col2=""});

            var query = from a in newDT
                        join b in OldDT on a.col1 equals b.col1
                        select new {b.col1,a.col2};


输出:
1 2
1 2
2 1
3 2
3 2