linq - 如何使用 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; }
}
解决方案
您可以使用链接到 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
)));
推荐阅读
- ruby - 如何安装“rubygems”
- android - 工具提示内的底部工作表不起作用,此弹出窗口显示在底部工作表后面
- c# - 使用 FlaUI 处理不支持的属性?
- mysql - 按位掩码中设置的位数排序
- flutter - 如何在颤动中使列和行内的框的自定义高度
- php - Firebase 推送通知在 android kotlin 和 PHP 中不起作用
- spring-boot - 原始 Axon 应用程序作为 Fat JAR 运行不会自动配置 Axon Bean
- java - 如何将H2添加到Wildfly,以便我可以看到数据库中的数据?
- python - 如何在 Python 中合并来自多个文件夹的多个 CSV 文件?
- php - 为什么 PHP include 语句将 '?/../' 后面的内容视为当前目录的路径?