首页 > 解决方案 > 如何使用 EF Core 和 Linq 选择嵌套对象?

问题描述

希望可以有人帮帮我

我有一些表链接Table1-->Table2-->Table3-->Table4 关系是一对多的(Table1的一条记录有Table2的很多条记录,每一张都有Table3的很多条记录..... ..)。

我有一个 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”的属性,我需要恢复“Result”的所有值的列表我可以从 Table1 的 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; }
}

标签: linqentity-framework-core

解决方案


您可以使用链接到 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
)));

推荐阅读