首页新闻找找看学习计划

MVC 查询 指定列 条数>=2 的所有数据

0
悬赏园豆:40 [已解决问题] 解决于 2017-12-22 14:56


我想让查询数据 (*), 条件是 表中第二列如果相同的值 的 数据个数   有 2个(BUSINESSRECORD .count=2)就取出来数据。

意思就是上图第二列BUSINESSRECORD又好几行数据, 其中有2个值为76的数据,把他当做where条件 取出所有的数据。

  其他的值70、42什么的相同的值的个数没有超过2个,就不要。

怎么实现  取到  BUSINESSRECORD 相同值 count=2 的数据?

我要在VIEW界面接受 传过来的这两条数据。 

漠明奇喵的主页 漠明奇喵 | 初学一级 | 园豆:46
提问于:2016-06-28 21:49
< >
分享
最佳答案
0
var result = new List<YourEntity>();
list.GroupBy(r => r.BUSINESSRECORD).Where(g => g.Count() == 2).ToList()//根据BUSINESSRECORD分组并取得所有包含2条数据的分组
                .ForEach(ig => ig.ToList().ForEach(result.Add));//循环取出得到的分组里的数据
收获园豆:10
jmlsaul | 菜鸟二级 |园豆:247 | 2017-08-31 15:36

呃,发现可以写得简单点。

var result = list.GroupBy(r => r.BUSINESSRECORD).Where(g => g.Count() == 2).SelectMany(g=>g);
jmlsaul | 园豆:247 (菜鸟二级) | 2017-08-31 16:25
其他回答(4)
0

group having count(column)=2

当然 也可能有更好的实现方法

收获园豆:10
浮云也是种寂寞 | 园豆:992 (小虾三级) | 2016-06-29 09:12
0

使用Linq扩展可以很好地对集合数据做筛选的

小熊vs | 园豆:20 (初学一级) | 2016-06-30 09:18
0

假设你的这个对象为context.Tests,如果在后台做的话,实现功能还是很简单的,但是没怎么考虑性能:

var list=context.Tests.ToList();
if(list.Count(m=>m.BusinessRecords==76)==2)
{
   return list;     
}

 

 

收获园豆:10
Buthcer | 园豆:238 (菜鸟二级) | 2016-07-01 14:52
0

事实上这种情况如果使用sql语句写的话 

;with t as (
  select *, count(1) over(partition by BUSINESSRECORD) cnt
  from t
)  select * from t where cnt >=2

开窗+CTE可以很轻松查出来  这个语法适用于sqlserver2008以上版本

如果linq的话就能很原始的嵌套查询

return items.Where(item=>item.Count(
  item2=>item2.BUSINESSRECORD == item.BUSINESSRECORD
) >=2)

收获园豆:10
癫ω倒④ゞ | 园豆:262 (菜鸟二级) | 2016-07-04 09:16
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册