List<Student> student = new List<Student>();以上是我自定义的一个泛型学生类,包含“姓名”、“年龄”、“班级”、“学号”等属性,现在要按照某一个属性对其进行分组,例如:student 中有10条记录,现在要按照班级分类,其中第1、2条是同一班级、第3、4条是同一班级、第5、6、7条是同一班级、第8、9、10条是同一班级,我需要把它分成4组,并得到分组以后的List,然后循环它,去执行后面的操作,请问这个分组的方法应该怎么写?

解决方案 »

  1.   

    .net链表的功能在LINQ之后功能扩大了不少,可以和数据表一样操作了。
      

  2.   

    List<Student> testStr = new List<Student>();
                //添加testStr 元素
                IEnumerable<IGrouping<string, Student>> query = testStr.GroupBy(x => x.班级);
                foreach (IGrouping<string, Student> info in query)
                {
                    List<Student> sl = info.ToList<Student>();//分组后的集合
                    foreach (Student item in sl)
                    {
                        
                    }
                }
      

  3.   

    Lambda表达式是.net3.0中的新特性,我用的是.net2.0,怎么办?
      

  4.   

    2.0就用Dictionary
    我写了个小DEMO,你看一下
    class Program
        {
            static void Main(string[] args)
            {
                List<Student> list = new List<Student>()
               {
               new Student{Name="aaa",ClassName="a",Age=20,StuNo="a001"},
               new Student{Name="bbb",ClassName="a",Age=18,StuNo="a003"},
               new Student{Name="ccc",ClassName="b",Age=20,StuNo="b001"},
               new Student{Name="ddd",ClassName="b",Age=20,StuNo="b045"},
               new Student{Name="eee",ClassName="c",Age=20,StuNo="c001"},
               new Student{Name="fff",ClassName="c",Age=20,StuNo="c008"},
               new Student{Name="ggg",ClassName="c",Age=20,StuNo="c050"},
               new Student{Name="hhh",ClassName="c",Age=20,StuNo="c007"}
               };
                Dictionary<string, List<Student>> stuGroup = new Dictionary<string, List<Student>>();
                
                foreach (Student item in list)
                {
                    if (!stuGroup.Keys.Contains(item.ClassName))
                    {
                        stuGroup.Add(item.ClassName, new List<Student>());
                    }
                    stuGroup[item.ClassName].Add(item);            }
                foreach (KeyValuePair<string,List<Student>> item in stuGroup)
                {
                    Console.WriteLine("班级:"+item.Key);
                    foreach (Student stu in item.Value)
                    {
                        Console.WriteLine("姓名:" + stu.Name + "\t班级:" + stu.ClassName + "\t年龄:" + stu.Age + "\t学号:" + stu.StuNo);
                    }
                }
                Console.Read();
            }
        }
        class Student
        {
            public string Name { get; set; }        public string ClassName { get; set; }        public int Age { get; set; }        public string StuNo { get; set; }    }输出:
    班级:a
    姓名:aaa 班级:a 年龄:20 学号:a001
    姓名:bbb 班级:a 年龄:18 学号:a003
    班级:b
    姓名:ccc 班级:b 年龄:20 学号:b001
    姓名:ddd 班级:b 年龄:20 学号:b045
    班级:c
    姓名:eee 班级:c 年龄:20 学号:c001
    姓名:fff 班级:c 年龄:20 学号:c008
    姓名:ggg 班级:c 年龄:20 学号:c050
    姓名:hhh 班级:c 年龄:20 学号:c007
      

  5.   

    分组并打印:(from student in students group student by student.age into g select g).ToList().ForEach(g =>
    {
        richTextBox1.Text += g.Key + "\n";
        foreach (Student stu in g)
        {
            richTextBox1.Text += stu.name + "," + stu.age + "," + stu.grade + "," + stu.number + "\n";
        }
    });
      

  6.   

    右键-> properties-> frame 选择为4.0