gpt4 book ai didi

sql - 使用 LINQ to Entities 编写嵌套联接

转载 作者:行者123 更新时间:2023-12-02 06:21:29 28 4
gpt4 key购买 nike

我很确定这里有一个这样的例子,我只是找不到它,因为我不知道确切的术语。所以请善意一点。

问题应该很简单:

我有一个 Azure SQL 数据库,设计有些糟糕(即缺少外键等)。由于我目前无法重新设计数据库,因此我必须通过查询手动处理关系。由于数据库也是我们软件的瓶颈,因此我必须尝试以尽可能少的数据库命中来完成查询。

我有实体 A、B、C 和 D。实体 A 有多个实体 B(通过未注册的外键连接),实体 B 有多个实体 C,实体 C 有多个实体 D。

我有实体 A 的 ID,并且希望尽可能最佳地返回直到 D 的所有连接实体的树。

开始:

from A in dbA.Where(e=>e.Id==IDParameter)
join B in dbB on A.Id equals B.AId into Bs

现在我需要对 C 的 Bs 中的每个 B 进行此操作,然后对 D 的 Cs 再次进行此操作。如果我采用显而易见的方式,首先加入 Ds 和 Cs,然后加入 Bs 和 Cs,最后加入 As 和Bs,这意味着将所有 D 与 C 结合起来,然后所有...您明白了,直到我最终到达 IDParameter 过滤器。只是看起来没有效果。

是否有正确的 C# 方法可以在单个查询中执行此操作?

最佳答案

当您定义了关系时,您可以使用手动联接来模拟 EF 的操作。您所需要的就是使用 Group Join和预测。像这样的事情:

var result =
(from a in db.A
where a.Id == IDParameter
join b in db.B on a.Id equals b.AId into Bs
select new
{
a,
Bs =
(from b in Bs
join c in db.C on b.Id equals c.BId into Cs
select new
{
b,
Cs =
(from c in Cs
join d in db.D on c.Id equals d.CId into Ds
select new
{
c,
Ds = Ds.ToList()
}).ToList()
}).ToList()
}).ToList();

关于sql - 使用 LINQ to Entities 编写嵌套联接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39095064/

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