我有两个列表列表是MyClassA
的列表和MyClassB
的列表B
MyClassA
:
MyClassB
:
项目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));
答案 0 :(得分:2)
Any
将是> 0.对于> 1你可以做类似的事情:
listA.Where(a => listB.Count(b => b.MyClassAId == a.Id && b.Active) > 1);
或更好的短路(但对于LINQ到对象,但不是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));
答案 1 :(得分:0)
var query = (from a in listA let count = listB.Count(b => b.Active && a.Id == b.MyClassAId) where count > 1 select a).ToList();