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));//循环取出得到的分组里的数据
呃,发现可以写得简单点。
var result = list.GroupBy(r => r.BUSINESSRECORD).Where(g => g.Count() == 2).SelectMany(g=>g);
group having count(column)=2
当然 也可能有更好的实现方法
使用Linq扩展可以很好地对集合数据做筛选的
假设你的这个对象为context.Tests,如果在后台做的话,实现功能还是很简单的,但是没怎么考虑性能:
var list=context.Tests.ToList(); if(list.Count(m=>m.BusinessRecords==76)==2) { return list; }
事实上这种情况如果使用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)