如何查询EntityB集合中包含任何EntityB的所有EntityA

本文关键字:EntityB 包含任 EntityA 集合 何查询 查询 | 更新日期: 2023-09-27 18:03:57

给定以下两个c#实体类示例…

class EntityA
{
  public int EntityAId { get; set; }
  public virtaul ICollection<EntityB> Bs { get; set; }
}
class EntityB
{
  public int EntityBId { get; set; }
  public string Foobar { get; set; }
  public virtual EntityA A { get; set; }
}

我如何使用实体框架+ LINQ来查询所有EntityA,其中包含EntityB在提供的EntityB集合中?

澄清一下,如果我有以下EntityB子集…

var bs = new List<EntityB>
{
  new EntityB { Foobar = "a" },
  new EntityB { Foobar = "b" },
  new EntityB { Foobar = "c" }
};

我想找到所有EntityA,其中EntityA.Bs集合包含上述bs集合中任何可能的EntityB

如何查询EntityB集合中包含任何EntityB的所有EntityA

所以当你最初问我认为你的意思是你只有一个dbSet的EntityB。现在我看到您正在尝试查找给定集合中定义有EntityB的任何EntityA,我们可以简化如下:

var bs = your collection of EntityB
var dbSet = dbSet of type EntityA
var entities = dbSet.Where(m => m.Bs.Any(b =>
    bs.Any(b2 => b2.Foobar == b.Foobar).ToList();

这将查看EntityA的集合并返回任何EntityA,其中任何EntityB的Foobar等于给定集合中的任意一个。

我会从EntityA查询,因为你正在获得EntityA的集合。但如果你想从EntityB,你可以这样做:

var entities = entityBSet.Where(m => 
    bs.Any(b => 
        b.Foobar == m.Foobar))
    .Select(m => m.A)
    .ToList();