获取子列表上有条件的列表

2024-02-28

我有两个列表 listA 是一个列表MyClassA和列表BMyClassB

MyClassA具有以下属性:

  • Id
  • Name

MyClassB具有以下属性:

  • Id
  • Name
  • Active
  • 我的班级ID

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(使用前将#替换为@)

获取子列表上有条件的列表 的相关文章

随机推荐