需求:根據標籤從產品標籤關係表裏篩選產品,一個產品對應多個標籤,現在要篩選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));
}