又到水的時間了,-。- 先講下今天 在工做上遇到一個的問題吧! 其實相對的來講很簡單 就是如同標題同樣,由於我是在用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