我有两个列表listA是MyClassA
的列表,而listB是MyClassB
的列表MyClassA
具有属性:
ID
名称MyClassB
具有属性:
ID
名称
活性
MyClassAId
一个项目MyClassA
可以具有一个或多个MyClassB项目
- MyClassA
|
| MyClassB
| MyClassB
- MyClassA
|
| MyClassB
| MyClassB
| MyClassB
| MyClassB
我想获取
MyClassA
列表,其中MyClassB
与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));
然后:
listA.Where(a => include.Contains(a.Id));