各位老师,目前做一个项目如下方数据结构,目的想把C列的值进行整合,如原来C1、C2、C3,现在要在A列和B列相同的情况下整合成 C1~3 这样的格式,请问我应该如何去做?请赐教!谢谢!数据表:ID  A列   B列    C列
1    A1     B1     C1
2    A2     B1     C1
3    A2     B1     C2

4    A2     B2     C1
5    A2     B2     C2
6    A2     B2     C3

7    A3     B1     C1
8    A4     B1     C1
结果要得出:A列   B列    C列
A1     B1     C1
A2     B1     C1~2  
A2     B2     C1~3
A3     B1     C1
A4     B1     C1

解决方案 »

  1.   


            public class ABC
            {
                public int ID { get; set; }
                public string A { get; set; }
                public string B { get; set; }
                public string C { get; set; }
            }
            static void Main(string[] args)
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("ID");
                dt.Columns.Add("A");
                dt.Columns.Add("B");
                dt.Columns.Add("C");
                dt.Rows.Add(new object[] { 1, "A1", "B1", "C1" });
                dt.Rows.Add(new object[] { 2, "A2", "B1", "C1" });
                dt.Rows.Add(new object[] { 3, "A2", "B1", "C2" });
                dt.Rows.Add(new object[] { 4, "A2", "B2", "C1" });
                dt.Rows.Add(new object[] { 5, "A2", "B2", "C2" });
                dt.Rows.Add(new object[] { 6, "A2", "B2", "C3" });
                dt.Rows.Add(new object[] { 7, "A3", "B1", "C1" });
                dt.Rows.Add(new object[] { 8, "A4", "B1", "C1" });
                Dictionary<string, ABC> dic = new Dictionary<string, ABC>();
                Regex reg = new Regex(@"(?<=^C\d+)(?:~\d+|$)");
                string key = string.Empty;
                foreach (DataRow r in dt.Rows)
                {
                    key = r["A"].ToString() + r["B"].ToString();
                    if (!dic.ContainsKey(key))
                        dic.Add(key, new ABC() { A = r["A"].ToString(), B = r["B"].ToString(), C = r["C"].ToString() });
                    else
                        dic[key] = new ABC() { A = r["A"].ToString(), B = r["B"].ToString(), C = reg.Replace(dic[key].C, "~" + new Regex(@"\d+").Match(r["C"].ToString()).Value) };
                }
                foreach (KeyValuePair<string, ABC> k in dic)
                    Console.WriteLine("{0} {1} {2}", k.Value.A, k.Value.B, k.Value.C);
          }
    /*
    A1 B1 C1
    A2 B1 C1~2
    A2 B2 C1~3
    A3 B1 C1
    A4 B1 C1*/
      

  2.   

    linq不是很懂            DataTable dt = new DataTable();
                dt.Columns.Add("ID");
                dt.Columns.Add("A");
                dt.Columns.Add("B");
                dt.Columns.Add("C");
                dt.Rows.Add(new object[] { 1, "A1", "B1", "C1" });
                dt.Rows.Add(new object[] { 2, "A2", "B1", "C1" });
                dt.Rows.Add(new object[] { 3, "A2", "B1", "C2" });
                dt.Rows.Add(new object[] { 4, "A2", "B2", "C1" });
                dt.Rows.Add(new object[] { 5, "A2", "B2", "C2" });
                dt.Rows.Add(new object[] { 6, "A2", "B2", "C3" });
                dt.Rows.Add(new object[] { 7, "A3", "B1", "C1" });
                dt.Rows.Add(new object[] { 8, "A4", "B1", "C1" });            var query = from d in dt.AsEnumerable() group d by new { one = d.Field<string>("A"), two = d.Field<string>("B") } into g select new { A = g.Key.one, B = g.Key.two, C = g.Select(x => x.Field<string>("C")) };
                foreach (var q in query)
                {
                    Console.WriteLine(q.A + "  " + q.B + "  " + (q.C.Count() == 1 ? q.C.First() : q.C.First() + "~" + new Regex(@"\d+").Match(q.C.Last()).Value));
                }
    /*
    A1  B1  C1
    A2  B1  C1~2
    A2  B2  C1~3
    A3  B1  C1
    A4  B1  C1*/