Lambda表達式where過濾,多個且的關係

需求:根據標籤從產品標籤關係表裏篩選產品,一個產品對應多個標籤,現在要篩選N個標籤都有的產品。參入會傳入一個標籤數組

難點:如果用sql去寫,可以循環標籤集合,拼出sql語句進行查詢。但是項目框架用的EF框架,查詢全部都是使用的Linq和lambda表達式。爲了不改變框架主體,儘量使用linq或lambda。
但是where關鍵字無法動態的實現tagId = 參數1 && tagId = 參數2… 的邏輯。

解決方式:

       if (model.TagIds.count()>0)
         {
            //先查出所有包含標籤集合的產品
             var list = _repositoryCourseTag.Get(m => model.TagIds.Contains(m.TagId));
             
             //然後通過產品ID進行分組,並篩選出分組後數量=傳進來的標籤數組數量的數據,這裏的數據就是所需的結果了
             var courseIds= list.GroupBy(s => s.CourseDefinitionId).Where(s => s.Count() == 
             model.TagIds.Count()).Select(s => s.Key);
             
             query = query.Where(m => courseIds.Contains(m.courseId));
         }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章