实体框架核心按实体集合过滤

时间:2020-11-04 08:32:32

标签: linq filter entity-framework-core

我正在尝试根据其嵌套集合中的数据检索所有实体。 我有一个Family和一个Adult对象,以及一个DbContext:

    public class Family {
        // other properties
        public List<Adult> Adults { get; set; }
        public List<Child> Children{ get; set; }
    }

    public class Person
    {
        // other properties
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string HairColor { get; set; }
    }

    public class FamilyContext : DbContext
    {
        public DbSet<Family> Families { get; set; }
        // other stuff..
    }

现在,我想检索所有至少有一个成年人有红头发的家庭。 我最好的猜测是:

    var result = ctx.Families.
        Include(family => family.Adults.Where(adult => adult.HairColor.Equals("Red"))).
        Where(family => family.Adults.Count>0).
        ToList();

在调试时,我可以看到在包含之后,我拥有了所有家庭,但只有红色头发的成人被装载。其他所有家庭只有0位成人。

所以我想我可以根据加载的成人人数进行过滤。但这不起作用。似乎在这里需要所有成年人时都将它们加载,最终结果是所有现有的Family实体。

1 个答案:

答案 0 :(得分:0)

我一直在找几个小时。发布后立即发现:

var result = ctx.Families.
   Where(family => family.Adults.Any(adult => adult.HairColor.Equals("Red"))).
   ToList()