如何查询实体集合中包含任何实体的所有实体?

时间:2014-05-16 18:54:33

标签: c# linq entity-framework

给出以下两个示例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; }
}

我如何使用Entity Framework + LINQ查询所提供的EntityA集合中包含任何EntityB的所有EntityB

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

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

我想查找EntityA所有EntityA.BsEntityB集合中包含上述bs集合中任何可能{{1}}的内容。

1 个答案:

答案 0 :(得分:1)

所以,当你最初问我认为你的意思是你只有一个实体B的dbSet。现在,我发现您正试图找到任何具有在给定集合中定义的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的集合,并将返回任何EntityB,其任何EntityB的Foobar等于给定集合中的任何一个。

我会从EntityA查询,因为您正在获取EntityAs的集合。但如果您想从EntityB获得以下内容,请执行以下操作。

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