给出以下两个示例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.Bs
个EntityB
集合中包含上述bs
集合中任何可能{{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();