【发布时间】:2017-01-17 20:41:03
【问题描述】:
我有一个 LINQ 查询,我需要在其中加入 3 个表,但它似乎一直在评估表达式。
你觉得这有什么问题,或者有什么想法让我上吊吗? VS2010 输出窗口显示不同的线程以 0 退出。
这是 LINQ 表达式:
var results = (from drECO in dtECO.AsEnumerable()
join drBOMTo8 in dtBOM.AsEnumerable() on drECO.Field<string>("PN8Dig") equals drBOMTo8.Field<string>("PN8Dig")
from drBOMFrom8 in dtBOM.AsEnumerable ()
join drFAA8 in dtFAA.AsEnumerable () on drBOMFrom8.Field<string>("PN8Dig") equals drFAA8.Field <string>("PN8Dig")
from drBOMFromMon in dtBOM .AsEnumerable ()
join drFAAMon in dtFAA .AsEnumerable () on drBOMFromMon.Field <string>("Mon") equals drFAAMon.Field <string>("Mon")
select new
{
PN = drECO .Field <string>("PN"),
PNNEWREV = drECO.Field <string>("PNNewRev"),
PN8DIG = drECO.Field <string >("PN8Dig"),
ECO = drECO .Field <string >("ECO"),
MON = drFAAMon.Field <string>("Mon"),
SUPNUM = drFAAMon.Field <string>("SupNum"),
URL = drFAAMon.Field <string>("URL")
}).Distinct ();
【问题讨论】:
-
from drBOMmon in dtBOM.AsEnumerable()将创建笛卡尔积。这是故意的吗? -
天啊。非常感谢。我不知道。 (作为一个方面,我是新手,这是我的第一个问题)我有 dtECO,我想通过 PN8Dig 链接到 dtBOM,然后我希望 dtBOM 用 Mon 链接到 dtURL。这个逻辑会创建笛卡尔连接吗?我希望它们都是内部连接。谢谢伊万。
-
是的,它确实创建了笛卡尔积,因为它没有与之前的连接连接。要使其成为内部连接,您必须将其与
drECO或drBOM8Dig相关联,例如而不是from drBOMmon in ..你会使用join drBOMmon in ... on ... -
是的@Ivan。我需要 dtECO 通过 8DigPN 链接到 dtBom,并且需要 dtBom 通过 8DigPN 和 Mon 链接到 dtFAA。我已经更改了它,但它仍然挂起。
-
如果你用你所做的更新问题会很好。另外,如果您将
Distinct()替换为Count()会发生什么(只是为了测试) - 它是否完成并且结果编号是多少?
标签: c# linq multiple-tables