linq 匹配 predicate 的记录的项目ID

5w9g7ksd  于 2023-09-28  发布在  其他
关注(0)|答案(1)|浏览(120)

我有以下课程:

class A : IAggregateRoot
{
    public int Id { get; set; } 
    public IEnumerable<B> Bs { get; set; }
    public bool IsActive { get; set;}
}

class B : ValueObject
{
    public int Id { get; set; }
    //no navigation upstream to A due to DDD restrictions
}
var bIds = new int[]{1,5,6,8,9};

我想做的是过滤那些与活动的AIsActive标志为true)相关联的B(或其id)。我都不知道从哪开始。

plicqrtu

plicqrtu1#

var allBsInActiveAs = allAs.Where(a => a.IsActive)
    .SelectMany(a => a.Bs).Select(b => b.Id).Distinct().ToList();
  1. Where()过滤所有活动A。
  2. SelectMany()将这些A的B放在一个List中。
  3. Select()只取这些B的Id
  4. Distinct()删除重复的ID条目

相关问题