又到水的时间了,-。- 先讲下今天 在工做上遇到一个的问题吧! 其实相对的来讲很简单 就是如同标题同样,由于我是在用Linq写,因此卡了下 顺便百度了下,首先假设 有一张学生表 和 课程表, 一个学生能选多个课程 因此在这里学生和课程表 是一对多的,而我如今 选择了 信息 数学 历史 这3门课程 去查没有选择过这三门课程的学生web
如下 是代码:c#
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() 这个,发现提示 参数无效,因而我转换思路了 由于我已经在这里花了半个小时的时间了,优化
第二种写法:spa
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));
这种写法 势必会形成查出不少重复的数据,后面你必须不得不对它进行一个去重的步骤,不过想要的效果出现了, 其实我最先的是想法 是将两个集合都去进行一个遍历比较的 这样就会有两次遍历 但发现不是很好(主要仍是本身不会写) 因此想偷一下懒 择中一下,固然 我发现实际效果不是很理想 不知道是否是由于前面太多的查询致使的,这个 到时由大神去优化吧! 其实当咱们卡在一个功能实现的时候,不如换个思路,我一直很喜欢一句话“换个角度,看世界”。好了,此次就水这么多啦。code