代码之家  ›  专栏  ›  技术社区  ›  jsonGPPD

使用Lambda/Linq EF C从3个模型中获取值,其中1个模型是主根#

  •  0
  • jsonGPPD  · 技术社区  · 7 年前

    我正在尝试使用EF从数据库检索数据。

    我有三个这三个样品模型

    public class Info { 
        [Key] public int InfoId {get;set;}
        public string infoName {get;set;}
    
        public ICollection<SubInfo> SubInfo {get;set;}
     }
    
     public class SubInfo { 
        [Key] public int SubInfoId {get;set;}
        public string subInfoName {get;set;}
    
        public Info Info {get;set}
        public int InfoId {get;set;}
        public ICollection<SubSubInfo> SubSubInfo {get;set;}
     }
    
     public class SubSubInfo { 
        [Key] public int SubSubInfoId {get;set;}
        public string subInfoName {get;set;}
    
        public SubInfo SubInfo {get;set}
        public int SubInfoId {get;set;}
     }
    

    模型说明: Info 是最主要的 SubInfo 是主信息的子项,并且 SubSubInfo 是子信息详细信息的子部分。

    到目前为止,我正在使用这个类似的代码来检索数据,它工作得很好

    var info = context.Info.Include(x=>x.SubInfo).ToList();
    

    var info = context.Info.Include(x=>x.SubInfo.Select((y=>y.SubSubInfo))); 但我得到一个错误,上面写着: InvalidOperationException: The Include property lambda expression 'x => ...

    2 回复  |  直到 7 年前
        1
  •  3
  •   AliJP    7 年前

    当您使用多个包含时,必须首先包含您的第一个级别。

    var info = context.Info.Include(x=> x.SubInfo)
                           .Include(x=> x.SubInfo.Select(y=> y.SubSubInfo ));
    

    如果使用EF Core,也可以使用thenclude()。
    有关更多信息,请参阅下面的链接
    http://entityframework.net/include-multiple-levels

        2
  •  1
  •   Vlădel    7 年前

    你想要达到的目标很容易就能实现 here here . 你得到的错误是你不能合并 生的 ( Include Select 在你的情况下)。

    换句话说,你是在试图 可通过使用类似以下代码实现:

    var info = context.Info.Include("SubInfo.SubSubInfo").ToList();
    

    编辑开始

    包括 ThenInclude 方法。例如

    using (var context = new BloggingContext())
    {
        var blogs = context.Blogs
            .Include(blog => blog.Posts)
                .ThenInclude(post => post.Author)
            .ToList();
    }
    

    在你的背景下:

    var info = context.Info.
               Include(subInfo => subInfo.SubInfo).
               ThenInclude(subSubInfo => subSubInfo.SubSubInfo).
               ToList();
    

    哪里 SubInfo SubSubInfo .NET核心 .NET框架 自从 .NET核心 不支持 .

    但我看到@AliJP已经回答了你的问题。

    编辑结束

    如果你想读更多关于这个话题的文章,试着读一下 急装 延迟加载 .