【问题标题】:EF Core: Return only related date two levels downEF Core:仅返回两个级别的相关日期
【发布时间】:2017-12-28 04:51:24
【问题描述】:

我有一个简单的设置,我试图根据父实体获取第二级子实体。

例子

public class Country {
  public string Name {get;set;}
  public List<State> States {get;set;}
}

public class State {
 public string Name {get;set;}
 public Country Country {get;set;}
 public List<City> Cities {get;set;}
}

public class City {
 public string Name {get;set;}
 public State State {get;set;}
}

如何仅检索具有 Country.Name == "Japan" 的父级的城市(基本上忽略所有其他信息)?

我知道 ThenInclude:

dbContext.Countries
.Include(o => o.States}
.ThenInclude(x => x.Cities)
.Where(o => o.Name.Equals("Japan"))
.ToList();

然后我必须提取每个城市列表并将其合并到仅包含列表的新列表中(我认为这不是优雅的方式)。

【问题讨论】:

  • 对于这个用例,城市的数量是非常有限的。无论如何,我会将其展平为两张桌子。国家表会非常小,有 195 条记录。如果您停留在拥有超过 10 万居民的城市(这对于一般用途来说非常好),那么该表最多将有 5000 条记录,SQL 将能够非常轻松地处理。

标签: asp.net entity-framework entity-framework-core


【解决方案1】:

发现最简单的最简单的方法是反向查看。

 await dbContext.Cities
       .Where(o => o.State.Country.Name.Equals("Japan"))
       .ToListAsync();

这将仅返回祖父母名称为 Japan 的城市列表。

【讨论】:

  • 可能是正确的想法,但您的代码不正确,甚至无法编译。
  • @GertArnold 是的,在美化答案时意外删除了 where。这是我得到的工作件。
  • 您首先要更新问题。您几乎无法从 City 对象遍历到 State 和 Country。
  • 我刚刚意识到代码示例中缺少一半的关系。修好了,现在应该都说得通了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-15
  • 2013-01-18
  • 1970-01-01
  • 1970-01-01
  • 2021-03-29
相关资源
最近更新 更多