检索相关数据(多级)

时间:2016-12-09 02:04:19

标签: c# entity-framework linq

我有三个班级:

  1. 国家即可。
  2. 即可。
  3. public class Country
    {
        public Country()
        {
            Districts = new HashSet<District>();
        }
    
        public string Name { get; set; }
        public virtual ICollection<District> Districts { get; private set; }
    }
    
    public class Ditrict
    {
        public Ditrict()
        {
            Provinces = new HashSet<Province>();
        }
    
        public string Name { get; set; }
        public virtual ICollection<Province> Provinces { get; private set; }
    }
    
    public class Province
    {
        public string Name { get; set; }
    }
    
  4. 我需要完成的是如何包含所有(即使没有),国家/地区(即使没有)在使用Ling的一个命令中。

    原因是我将使用DevExpress Grid,因此用户可以看到国家/地区并添加新的区域,并且可以看到并添加新的

    我的所有尝试都失败了,因为我得到的是国家 Disctrict

    是的,我正在使用:

    • VS 2015
    • EF Core
    • MS SQL 2016

    [解决]

    经过多次尝试和搜索,我发现我需要将 .ThenInclude 用于第三级省份。像:

    Countries = dbContext
                    .Countries
                    .Include(c => c.Districts)
                    .ThenInclude(p => p.Provinces)
                    .ToList();
    

1 个答案:

答案 0 :(得分:1)

如果你能把你尝试过的东西发给我们,那就太好了。粗略地说,您可以使用Country来加载依赖于加载的实体和集合。如果您从District开始查询实体链,它将检索所有国家/地区,即使他们没有using (var dbContext = new YourDbContext()) { return dbContext.Countries .Include(c => c.Districts.Select(d => d.Provinces)) .ToList(); } s:

Province

我猜你只检查国家/地区的原因是因为你的查询是从链的另一端(Country)开始的,而不是从上面的protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_earthbound); int charNo = (Integer)getIntent().getExtras().get(EXTRA_CHARNO); Earthbound character = Earthbound.chars[charNo]; ImageView photo = (ImageView) findViewById(R.id.photo); photo.setImageResource(character.getImageResourceId()); photo.setContentDescription(character.getName()); TextView name = (TextView) findViewById(R.id.name); name.setText(character.getName()); TextView desc = (TextView) findViewById(R.id.desc); desc.setText(character.getDesc()); Button voice_btn = (Button)this.findViewById(R.id.voice_btn); voice_btn.setContentDescription(character.getName()); final MediaPlayer mp = MediaPlayer.create(this, R.raw.snd_se_narration_characall_Ness); final MediaPlayer mmp = MediaPlayer.create(this, R.raw.snd_se_narration_characall_Lucas); voice_btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v){ mp.start(); mmp.start(); } }); 开始。< / p>