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

如何提升这个复杂的集合对象查询的效率?

有一个学生信息集合(studentList),里面包含1000条以上的学生信息(学生学号 sId, 学生姓名 sName , 学生年龄 sAge.......),然后有一个学生组的集合(groupList),每个组是包含 一个或多个学生,一个学生可以属于多个组,组有组号 (gId),组类别(gType), 组名(gName), 学号集合(sIdList),现需要按组名顺序打印出组类别是("A")并且组成员大于5的所有组以及该组的所有学生信息(同一组内的学生信息按学号排列)。
我想了一下有下面两种做法,一种Linq,一种用以前普通的集合查询(比较笨的方法)。现列在下面。
1.Linq
  //Student class
    public class Student
    {
        public string sId;
        public string sname;
        public int sAge;
    }

//Group class
    public class Group
    {
        public string gId;
        public string gType;
        public string gName;
        public List<int> sIdList;
    }

    class Program
    {
        static void Main(string[] args)
        {
            List<Group> groupList = new List<Group>();
            List<Student> student = new List<Student>();

            //Add data to groupList, student

            var aGroupQry = from item in groupList
                            where item.gType.Equals("A")
                            orderby item.gName ascending
                            select aGroupQry;
            string groupName;
            foreach(Group grp in aGroupQry)
            {
                groupName = grp.gName;
                var stdQry = from stuItem in student
                             orderby stuItem.sId ascending
                             join grpItem in grp.sIdList on stuItem.sId equals grpItem
                             select stuItem;
                if (stdQry.Count() > 5)
                {
                    //print grounName;
                    foreach (Student stu in stdQry)
                    {
                        //print stu info under current group
                    }
                }
            }

        }
    }
--------------------编程问答--------------------   class Program 
    { 
        static void Main(string[] args) 
        { 
            List <Group> groupList = new List <Group>(); 
            List <Student> student = new List <Student>(); 
            //Add data to groupList, student 

            List<string> sIdList;
            List<Student> stuList;
            Dictionary<Group, List<Student>> dic = new Dictionary<Group,List<Student>>();
            foreach (Group grp in groupList)
            {
                if(!grp.gType.Equals("A"))
                    return;
                sIdList = grp.sIdList;
                stuList = new List<Student>();
                dic.Add(grp, stuList);
                foreach (Student stu in student)
                {
                    if (sIdList.Contains(stu.sId))
                    {
                        stuList.Add(stu);
                    }
                }

            }//End of foreach (Group grp in groupList)

            //对dic进行排序和过滤,去掉组中成员数量小于5的组,对它按组的名称,组内按学号顺序来排列

            //打印出来结果 --------------------编程问答-------------------- 现在问题是这两种方法查询出来的效率都很低,不知道大家有没有碰到过类似的问题 ,有没有更好的改进办法,先谢了。 --------------------编程问答-------------------- 问题的根源在于Group.sIdList是一个是一组数!

class Program 
    { 
        static void Main(string[] args) 
        { 
            List <Group> groupList = new List <Group>(); 
            List <Student> student = new List <Student>();

           
            var astudent  = from s in student
                            from g in groupList
                            orderby s.sId ascending                             
                            where g.gType.Equals("A") && g.忘记了有个包含的方法(s.sId)&&一系列
            
当然查询结果有重复需要过滤就ok,至于5个一组你就可以遍历一遍咯

         }
    }
补充:.NET技术 ,  LINQ
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,