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));
         }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章