如何使用EF Core和Linq选择嵌套对象?

时间:2019-07-17 21:15:37

标签: linq entity-framework-core

希望有人可以帮助我

我有一些表链接了Table1-> Table2-> Table3-> Table4 这种关系是一对多的(表1的记录有许多表2的记录,每个记录都有许多表3的记录.......)。

我有一个Table1的ID,我需要获取Table4的任何属性的数据集(仅这些数据)。我可以在LINQ中使用Include和ThenInclude来到达最后一张表,但是...我怎么只能选择这些数据?

我有这样的代码:

_databaseContext.Table1.Where(t1 => t1.Id == id)
            .Include(t1 => t1.Table2Nav)
            .ThenInclude(t2 => t2.Table3Nav)
            .ThenInclude(t3 => t3.Table4Nav)
            .ToList();

这向我返回了第一个表的完整结构,但是,我该如何选择Table4的特定属性(假设Table4具有一个名为“ Result”的属性,并且我需要恢复该表的所有值的列表)我可以从表1的ID中找到“结果”。

先感谢

更新:这是类结构的示例:

public class Table1
{
    public int Id { get; set; }
    public List<Tables12> Tables12Nav { get; set; }
}

public class Tables12
{
    public int Id { get; set; }
    public Table1 Table1Nav { get; set; }
    public Table2 Table2Nav { get; set; }
}

public class Table2
{
    public int Id { get; set; }
    public List<Tables12> Tables12Nav { get; set; }
    public List<Table3> Table3Nav { get; set; }
}

public class Table3
{
    public int Id { get; set; }
    public Table2 Table2Nav { get; set; }
    public List<Table4> Table4Nav { get; set; }
}

public class Table4
{
    public int Id { get; set; }
    public Table3 Table3Nav { get; set; }
    public string Result { get; set; }
}

1 个答案:

答案 0 :(得分:1)

您可以使用sql链接来获取数据:

var TableD = from a in db.TableA
join b in db.TableB on a.Id equals b.TableAId
join c in db.TableC on b.Id equals c.TableBId
join d in db.TableD on c.Id equals d.TableCId
where a.Id == 2
select d;

如果您想使用代码,则可以按以下方式检索表4(表d):

var TableD = TableTemp.SelectMany(a => a.TableB.SelectMany(
    b => b.TableC.SelectMany(
        c => c.TableD
)));