C# 在导航属性内使用导航属性

C# 在导航属性内使用导航属性,c#,asp.net-mvc,entity-framework,asp.net-core,C#,Asp.net Mvc,Entity Framework,Asp.net Core,我有3个领域模型PdModel、PdTable、PdColumn。表之间的关系非常简单-PdModel有许多PdTable,PdTable有许多PDCColumn。我需要的是填充我的IndexModel,这样我就可以使用razor语法填充我的下拉列表Button——例如,为模型选择下拉列表,然后在特定的模型下为该模型表和该表列选择下拉列表 在这里我找到了提示,但它不起作用: 根据此url,我的索引方法如下所示: PdFolderTree = _context.pdFolderTree.Incl

我有3个领域模型PdModel、PdTable、PdColumn。表之间的关系非常简单-PdModel有许多PdTable,PdTable有许多PDCColumn。我需要的是填充我的IndexModel,这样我就可以使用razor语法填充我的下拉列表Button——例如,为模型选择下拉列表,然后在特定的模型下为该模型表和该表列选择下拉列表

在这里我找到了提示,但它不起作用:

根据此url,我的索引方法如下所示:

PdFolderTree =  _context.pdFolderTree.Include(x => x.pdModels)
                                                  .Include(x => x.pdModels.Select(y => y.PdTables))
                                                  .ToList();
我得到的错误是: InvalidOperationException:属性表达式“x=>{from x.pdModels select[y].PdTables}”无效。表达式应表示属性访问:“t=>t.MyProperty”。有关包含相关数据的详细信息,请参阅

我使用的是.NETCoreRazorPages/MVC

过去有人处理过类似的事情吗

谢谢

public class PdModel
{ 
    [Key]
    public int Id { get; set; }
    public string ModelName { get; set; }

    public ICollection<PdTable> PdTables { get; set; } 

}

public class PdTable
{
    [Key]
    public int Id { get; set; }
    public int ModelId { get; set; }
    public string TableName { get; set; }

    [ForeignKey("ModelId")]
    public virtual PdModel PdModels { get; set; }

    public ICollection<PdColumn> PdColumns { get; set; }

} 

public class PdColumn
{
    [Key]
    public int Id { get; set; }
    public string ColumnName { get; set; }

    [ForeignKey("TableId")]
    public PdTable pdTable { get; set; }
}
公共类PdModel
{ 
[关键]
公共int Id{get;set;}
公共字符串ModelName{get;set;}
公共ICollection PdTables{get;set;}
}
公共类PdTable
{
[关键]
公共int Id{get;set;}
公共int ModelId{get;set;}
公共字符串表名{get;set;}
[外键(“ModelId”)]
公共虚拟PdModel PdModels{get;set;}
公共ICollection PdColumns{get;set;}
} 
公共类PdColumn
{
[关键]
公共int Id{get;set;}
公共字符串ColumnName{get;set;}
[外键(“表ID”)]
公共PdTable PdTable{get;set;}
}

我认为您需要使用
。然后使用include()

您链接到的Microsoft提供了以下示例:

using (var context = new BloggingContext())
{
    var blogs = context.Blogs
        .Include(blog => blog.Posts)
            .ThenInclude(post => post.Author)
        .ToList();
}
因此,我认为您需要:

PdFolderTree =  _context.pdFolderTree.Include(tree => tree.pdModels)
                              .ThenInclude(model => model.PdTables)
                              .ThenInclude(table => table.PdColumns)).ToList();

我还没有对此进行测试,但它应该会给您一个列表,列出
pdFolderTree
是什么,并且应该填充所有导航属性。

我认为您需要使用
。然后使用include()

您链接到的Microsoft提供了以下示例:

using (var context = new BloggingContext())
{
    var blogs = context.Blogs
        .Include(blog => blog.Posts)
            .ThenInclude(post => post.Author)
        .ToList();
}
因此,我认为您需要:

PdFolderTree =  _context.pdFolderTree.Include(tree => tree.pdModels)
                              .ThenInclude(model => model.PdTables)
                              .ThenInclude(table => table.PdColumns)).ToList();
我还没有对此进行测试,但它应该会给您一个列表,列出
pdFolderTree
是什么,并且应该填充所有导航属性