本帖最后由 smallface_King 于 2013-04-24 09:21:24 编辑

解决方案 »

  1.   

    或者在数据库里面group by 也行
      

  2.   

    没办法在数据库里面group by,因为我要的报告类型、检验时期和工件号列表那3行,不能进行group by了
      

  3.   

    写了一个很简单的demo,你看看啦 //测试groupby 
                List<Person> list = GetList();            var arr3 = list.GroupBy(x => x.Id).Select(p => new { id = p.Key, nums = p.Count() });
                foreach (var item in arr3)
                {
                    Console.WriteLine(item.id + "counts:" + item.nums);
                }
    准备数据:       public static List<Person> GetList()
            {
                List<Person> list = new List<Person> 
                {
                    
                    new Person{Id="1",Name="百二",Data=7},
                    new Person{Id="2",Name="擦",Data=8},
                    new Person{Id="3",Name="发",Data=11},
                    new Person{Id="2",Name="大",Data=10},
                    new Person{Id="3",Name="俄",Data=12},
                    new Person{Id="1",Name="阿一",Data=1}      
                };
                return list;
            }
      

  4.   

    google 搜索“SQL 行转列”
    你的列是固定的?直接用几个case就行了
      

  5.   

     static void Main(string[] args)
        {
            //化学0x100000 //机械0x010000
            List<ArrayList> mylist = new List<ArrayList>()
                                            {
                                                new ArrayList(){001,"热卷箱",4,"化学成份报告"},           
                                                new ArrayList() { 001, "热卷箱", 4, "焊接报告" },
                                                new ArrayList() { 001, "热卷箱", 4, "机械报告" },
                                                new ArrayList() { 002, "热卷箱", 1, "机械报告" }
                                            };
            List<ArrayList> myResult = new List<ArrayList>();
            var ss = mylist.GroupBy(r => r[0]);
            foreach (var a in ss)
            {
                ArrayList oneResult = new ArrayList();
                oneResult.Add(a.Key);
                bool firstIN = true;
                //合并数目
                int recordCount = a.Count(r =>
                      {
                          if (firstIN)
                          {
                              //相同字条
                              oneResult.Add(r[1]);
                              oneResult.Add(r[2]);
                              firstIN = false;
                          }
                          oneResult.Add(r[3]);
                          return true;
                      });            oneResult.Add(recordCount);
                myResult.Add(oneResult);
            }
            //输出
            myResult.ForEach(r =>
            {
                foreach (var one in r)
                {                Console.Write("{0} ||", one);            }
                Console.WriteLine();        });
            Console.ReadKey();
        }
    自我感觉写的好丑,但我向来不怕丑,提出自己看法只求提高自己水平,第一用的是ArrayList而不是泛型实体类,太多的装箱拆箱很损性能,第二报告类型可以用[Flags] enum 然后按条件与是否会漂亮一些。第三太多的foreach,不知道怎么精减
      

  6.   

    亲,试了你这个方法应该可以实现了,可惜我们系统用的.NET framework2.0用不起这个方法
    我好纠结啊.....