实体框架递归地包括来自包含集合的每个实体的集合

Ian*_*ink 21 c# linq entity-framework

我有以下内容,我试图在这些国家的城市中包含人们的地址.

Country country = _db.Countries
               .Include(p=>p.Cities.People.????)
               .Where(....)
Run Code Online (Sandbox Code Playgroud)

不确定如何工作?

Rog*_*nez 34

您必须为对象层次结构树中的每个级别添加.Include调用:

 var result = db.Countries
            .Include(m => m.Cities)
            .Include(m => m.Cities.Select(v => v.People))
            .Where(....)
Run Code Online (Sandbox Code Playgroud)

编辑:D.Stanley的答案在紧凑的代码方面更好,并且也有效,我倾向于在模块性方面更喜欢这种语法.


D S*_*ley 29

文档:

要包含集合,集合和引用两个级别:

    query.Include(e => e.Level1Collection.Select(l1 => l1.Level2Collection.Select(l2 => l2.Level3Reference))).
Run Code Online (Sandbox Code Playgroud)

所以在你的情况下尝试

Country country = _db.Countries
               .Include(c=>c.Cities.Select(
                   cc => cc.People.Select(
                   p => p.Addresses)))
               .Where(....)
Run Code Online (Sandbox Code Playgroud)

访问此扩展方法需要该指令 using System.Data.Entity;

  • 我还要提到强类型包含需要添加:`using System.Data.Entity;`. (24认同)
  • 对于.net核心,语法现在是.Include(c => c.Cities).ThenInclude(cc => cc.People).ThenInclude(p => p.Addresses)请参阅https://docs.efproject.net/en /latest/querying/related-data.html#including-multiple-levels (5认同)