【问题标题】:How to select a nested object with EF Core and Linq?如何使用 EF Core 和 Linq 选择嵌套对象?
【发布时间】:2019-11-26 18:39:38
【问题描述】:

希望有人可以帮助我

我有一些表链接 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”的属性,我需要恢复所有值的列表“结果”我可以从 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; }
}

【问题讨论】:

  • 可以添加类/实体结构吗?
  • @gab 添加了一个例子

标签: linq entity-framework-core


【解决方案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
)));

【讨论】:

  • 谢谢。我会尽快尝试的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-20
  • 1970-01-01
相关资源
最近更新 更多