当前位置:编程学习 > C#/ASP.NET >>

求助:数据库数据在界面显示N条合并一条

--------------------编程问答-------------------- 用Linq的GroupBy方法可以了。 --------------------编程问答-------------------- 或者在数据库里面group by 也行 --------------------编程问答--------------------
引用 2 楼 nice_fish 的回复:
或者在数据库里面group by 也行

没办法在数据库里面group by,因为我要的报告类型、检验时期和工件号列表那3行,不能进行group by了 --------------------编程问答-------------------- 来个大神帮帮忙嘛,小女子在此谢过 --------------------编程问答-------------------- 写了一个很简单的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;
        }
--------------------编程问答-------------------- 全部读出来再循环,应该不会慢。

我估计你是开始是不是每次循环都去数据库里读呀。 --------------------编程问答-------------------- google 搜索“SQL 行转列”
你的列是固定的?直接用几个case就行了 --------------------编程问答--------------------
引用 7 楼 assky124 的回复:
google 搜索“SQL 行转列”
你的列是固定的?直接用几个case就行了

不固定,我的报告类型是动态的 --------------------编程问答-------------------- 不固定的就是复杂点,别人已经总结的很好了。完全理解可能要些时间,你可以依葫芦画瓢照着改改,实现功能就行了 --------------------编程问答--------------------
引用 9 楼 assky124 的回复:
不固定的就是复杂点,别人已经总结的很好了。完全理解可能要些时间,你可以依葫芦画瓢照着改改,实现功能就行了
只有自己再琢磨琢磨了 --------------------编程问答--------------------
 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,不知道怎么精减 --------------------编程问答--------------------
引用 11 楼 u010383116 的回复:
C# code?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 static void Main(string[] args)    {        //化学0x100000 //机械0x010000        List<ArrayList……

谢谢哈,我明天试下 --------------------编程问答--------------------
引用 11 楼 u010383116 的回复:
 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,不知道怎么精减

亲,你这个代码可以直接拷贝下来执行么? --------------------编程问答--------------------
引用 11 楼 u010383116 的回复:
 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,不知道怎么精减

亲,试了你这个方法应该可以实现了,可惜我们系统用的.NET framework2.0用不起这个方法
我好纠结啊.....
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,