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));
         }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值