gpt4 book ai didi

vb.net - 使用 LINQ 从多个表中选择全部

转载 作者:行者123 更新时间:2023-12-05 05:26:30 25 4
gpt4 key购买 nike

我有一个很奇怪的问题要问。

我有 6 个表需要从中获取数据:

TEMPLATE
TEMPLATE_INDEX
TABLE_1
TABLE_2
TABLE_3
TABLE_4

模板有一个到另一个表(兴趣)的外键,用作获取数据的键。是一对多的关系,1个INTEREST有多个TEMPLATE

表格是如何链接的

TEMPLATE <----- TEMPLATE_INDEX
TEMPLATE_INDEX <----- TABLE_1
TEMPLATE_INDEX <----- TABLE_2
TEMPLATE_INDEX <----- TABLE_3
TEMPLATE_INDEX <----- TABLE_4

我正在尝试下载与加载 UserControl 时选择的 INTEREST 有关的所有数据(我不知道这是否是个好主意,但我的想法是,当需要数据)。

我试过在 VB.NET 中这样做

dim temp_listing = From q In context.TEMPLATE _
Join t In context.TEMPLATE_INDEX On t.TEMPLATE_ID Equals q.ID
Join t1 In context.TABLE_1 On t1.TEMPLATE_INDEX_ID Equals t.ID
Join t2 In context.TABLE_2 On t2.TEMPLATE_INDEX_ID Equals t.ID
Join t3 In context.TABLE_3 On t3.TEMPLATE_INDEX_ID Equals t.ID
Join t4 In context.TABLE_4 On t4.TEMPLATE_INDEX_ID Equals t.ID
Select q, t, t1, t2, t3, t4

temp_listing.Load()

但并非所有数据都被下载。

谁能告诉我如何做到这一点?

我这样做的原因是因为数据库不是本地的。很多时候,在用户做了某事之后,需要一段时间才能出现相关信息。我认为加载时间更长并使程序在之后顺利运行会很容易,因为所有数据都是本地的(即 context.TABLE_1.Local)

如果有人有更好的解决方案,我会洗耳恭听。

谢谢。

最佳答案

首先要注意的是,您应该避免在 LINQ 语句中使用 Join 语句到 SQL 后端。它很冗长,几乎总是可以(并且应该)对导航属性做同样的事情。

我怀疑这里的问题是 INNER JOIN。与 OUTER JOIN 相反,它只返回连接双方都存在的数据。

取而代之的是,使用带有导航属性的 Include 语句:

From q In context.Template
.Include(t => t.TEMPLATE_INDEX.TABLE_1)
.Include(t => t.TEMPLATE_INDEX.TABLE_2)
.Include(t => t.TEMPLATE_INDEX.TABLE_3)
.Include(t => t.TEMPLATE_INDEX.TABLE_4)
Select q

这将转化为外部连接。

第二个评论是,通常在一次往返中获取数据是个好主意。但是你必须在这里做一些基准测试。具有“许多”连接的查询有一种方法可以在长度和宽度上炸毁结果集。最后,您可能会通过线路发送过多的数据,这比发送较少数据的几次单独往返所花费的时间要长得多。

关于vb.net - 使用 LINQ 从多个表中选择全部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25502242/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com