gpt4 book ai didi

c# - 在 EF 中使用 Left Join 时获取空行

转载 作者:太空宇宙 更新时间:2023-11-03 10:45:02 24 4
gpt4 key购买 nike

我在这里得到非常不同类型的场景,我在 4 个表之间应用 Left Join,没有表返回任何记录但是当我得到结果时,它显示 1(一个)行计数,所有值都设置为 null。

这是我的代码:

var qry2 = (from p in dbModel.tbl_PROJECT

join c in dbModel.tbl_PROJECTxCOMPONENT
on p.ProjectID equals c.ProjectID
into list8
from l8 in list8.DefaultIfEmpty()

join a in dbModel.tbl_PROJECTCOMPONENT
on l8.ProjectComponentID equals a.ProjectComponentID
into list9
from l9 in list9.DefaultIfEmpty()


join a in dbModel.tbl_COLOR
on l9.ColorID equals a.ColorID
into list10
from l10 in list10.DefaultIfEmpty()

where p.ProjectID == projectId

select new ProjectDetails1
{
Title = l9.Title,
ColorId = l9.ColorID,
ProjectComponentID = l9.ProjectComponentID,
ColorDefinition = l10.ColorDefination
}).ToList();

click here

最佳答案

我可以用下面的 SQL 重现你的问题

SQL

create table tbl_PROJECT
(
ProjectID int identity(1,1) primary key,
Title varchar(255)
)

create table tbl_COLOR
(
ColorID int identity(1,1) primary key,
ColorDefination varchar(255)
)

create table tbl_PROJECTCOMPONENT
(
ProjectComponentID int identity(1,1) primary key,
ColorID int not null references tbl_COLOR(ColorID),
Title varchar(255)
)

create table tbl_PROJECTxCOMPONENT
(
ProjectID int not null references tbl_PROJECT(ProjectID),
ProjectComponentID int not null references tbl_PROJECTCOMPONENT(ProjectComponentID)
)

在没有插入数据行的情况下,我尝试在 LINQPAD 中运行等效的 LINQ。

林克

from p in Tbl_PROJECTs
join c in Tbl_PROJECTxCOMPONENTs on p.ProjectID equals c.ProjectID into list8

from l8 in list8.DefaultIfEmpty()
join a in Tbl_PROJECTCOMPONENTs on l8.ProjectComponentID equals a.ProjectComponentID into list9

from l9 in list9.DefaultIfEmpty()
join a in Tbl_COLORs on l9.ColorID equals a.ColorID into list10

from l10 in list10.DefaultIfEmpty()
where p.ProjectID == 1
select new
{
Title = l9.Title,
//ColorId = l9.ColorID,
//ProjectComponentID = l9.ProjectComponentID,
ColorDefinition = l10.ColorDefination
}

经过一些更改以满足必须使用匿名对象的需要,我们得到一行空值,如您所指出的。有趣的是 - ToList() 删除了空行。
问题是您的 where 子句正在连接原始表“p”,而不是您连接的表“list8”。
where p.ProjectID == 1where list8.ProjectID == 1 交换,它应该可以正常工作。

关于c# - 在 EF 中使用 Left Join 时获取空行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23784319/

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