如何查询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
。
所以当你最初问我认为你的意思是你只有一个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();