我有一个需求,问题有很多标签,在查询时,需要筛选包含查询标签的一个集合(List<int>),以前的做法是先查询出来符合查询标签条件的标签id的结果集A,再查询问题时,加上判断是否包含该标签或者查询问题编号是否在结果集A中,这种方法实在是不得已之举。
今天经过不断试验,发现可以通过使用linq的except来实现一次性查询出结果。
···
集合.WhereIf(input.Tags != null && input.Tags.Count > 0, q => q.QuestionTags.LongCount()>=input.Tags.Count&& q.QuestionTags.Select(qt => qt.TagId).Except(input.Tags).LongCount()>=0)
···
需要注意的是,首先需要排除问题标签小于标签选择条件个数的记录,其次使用LongCount()>=0来满足问题拥有的标签个数大于选择条件的情况。最重要的是except的使用。
相关文章
- 03-30ef linq 中判断实体中是否包含某集合
- 03-30判断数组中是否包含某元素的方法
- 03-30SQL判断某列中是否包含中文字符或者英文字符
- 03-30SpringBoot中使用常量类来判断对象某属性的值是否包含在指定集合中
- 03-30一道腾讯面试题:如何快速判断某 URL 是否在 20 亿的网址 URL 集合中?布隆过滤器
- 03-30SQL判断某列中是否包含中文字符或者英文字符
- 03-30shell中判断字符串是否包含某串
- 03-30Drools规则引擎-如果判断某个对象中的集合是否包含指定的值
- 03-30.net判断System.Data.DataRow中是否包含某列
- 03-30高并发分布式系统中生成全局唯一(订单号)Id js返回上一页并刷新、返回上一页、自动刷新页面 父页面操作嵌套iframe子页面的HTML标签元素 .net判断System.Data.DataRow中是否包含某列 .Net使用system.Security.Cryptography.RNGCryptoServiceProvider类与System.Random类生成随机数