又到水的时间了,-。- 先讲下今天 在工作上遇到一个的问题吧! 其实相对的来说很简单 就是如同标题一样,因为我是在用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));
这种写法 势必会造成查出很多重复的数据,后面你必须不得不对它进行一个去重的步骤,不过想要的效果出现了, 其实我最早的是想法 是将两个集合都去进行一个遍历比较的 这样就会有两次遍历 但发现不是很好(主要还是自己不会写) 所以想偷一下懒 择中一下,当然 我发现实际效果不是很理想 不知道是不是因为前面太多的查询导致的,这个 到时由大神去优化吧! 其实当我们卡在一个功能实现的时候,不如换个思路,我一直很喜欢一句话“换个角度,看世界”。好了,这次就水这么多啦。
时间: 2024-10-26 00:41:22