首页 > 代码库 > 关于如何对两个 集合的数值进行比较

关于如何对两个 集合的数值进行比较

        又到水的时间了,-。-  先讲下今天 在工作上遇到一个的问题吧! 其实相对的来说很简单 就是如同标题一样,因为我是在用Linq写,所以卡了下 顺便百度了下,首先假设 有一张学生表 和 课程表, 一个学生能选多个课程 所以在这里学生和课程表 是一对多的,而我现在 选择了 信息 数学 历史 这3门课程 去查没有选择过这三门课程的学生

以下 是代码:

              var sc = from s in Entites.Students    
                  select new 
                 {
                  s.Course
                 };
             

              List<int> course = new list<int>
                        {
                          1,
                         2,
                        3,

                        };
         
         sc = sc.Where(n=> course.Contaic(n.Course));

 上面代码的写法是有误,也是我最初的想法,我想将两个List里的值去进行比较取反 从而得到我想要的效果,当然对Linq掌握的很糟糕的我发现Contaic(这里单词估计打错了) 它里面接受的是一个(int item)也就是说它并不适合去进行一个集合直接的比较,然后我通过Linq里的Intersect() 这个,发现提示 参数无效,于是我转换思路了 因为我已经在这里花了半个小时的时间了,

第二种写法:

    var sc = from s in Entites.Students
             from c in s.Course
            selec s;
     List<int> course = new list<int>
                        {
                          1,
                          2,
                          3,

                        };
         
         sc = sc.Where(n=> !course.Contaic(n.Course.type));

 这种写法 势必会造成查出很多重复的数据,后面你必须不得不对它进行一个去重的步骤,不过想要的效果出现了, 其实我最早的是想法 是将两个集合都去进行一个遍历比较的 这样就会有两次遍历 但发现不是很好(主要还是自己不会写) 所以想偷一下懒 择中一下,当然 我发现实际效果不是很理想 不知道是不是因为前面太多的查询导致的,这个 到时由大神去优化吧! 其实当我们卡在一个功能实现的时候,不如换个思路,我一直很喜欢一句话“换个角度,看世界”。好了,这次就水这么多啦。

关于如何对两个 集合的数值进行比较