我有两个列表 listA 是一个列表MyClassA
和列表BMyClassB
MyClassA
具有以下属性:
MyClassB
具有以下属性:
An item MyClassA
可以有一项或多项 MyClassB
- MyClassA
|
| MyClassB
| MyClassB
- MyClassA
|
| MyClassB
| MyClassB
| MyClassB
| MyClassB
我想要一份清单MyClassA
其中项目数MyClassB
with active = true
是 > 1
我尝试过这样的事情:
listA.Where(b => listB.Any(a => a.MyClassAId == b.Id && a.Active == true));
Any
将> 0。对于> 1,你可以这样做:
listA.Where(a => listB.Count(b => b.MyClassAId == a.Id && b.Active) > 1);
或者更好的短路(但对于 LINQ-to-Objects 可能没问题,但 EF 等不行):
listA.Where(
a => listB.Where(b => b.MyClassAId == a.Id && b.Active).Skip(1).Any());
另一种方法是预先计算计数:
var include = new HashSet<int>(listB.Where(b => b.Active)
.GroupBy(b => b.MyClassAId)
.Where(grp => grp.Count() > 1)
.Select(grp => grp.Key));
Then:
listA.Where(a => include.Contains(a.Id));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)