0
我需要在linq lambda语法中创建一个LEFT OUTER JOIN
。我想创建一个LINQ等效的SQL是:C#Linq Lambda左外部连接
SELECT DISTINCT
p.PartNum AS PartNum, p.ShortChar01 AS SkuType,
vv.VendorID AS VendorCode,
p.PartDescription AS Description, p.Company AS Company
FROM
Part p WITH (NOLOCK)
INNER JOIN
PartPlant pp ON p.Company = pp.Company AND p.PartNum = pp.PartNum
LEFT OUTER JOIN
Vendor vv On pp.VendorNum = vv.VendorNum
WHERE
p.RefCategory = @refCategory
因此,大家可以看到它的一个非常简单的查询加入了几桌。问题是可能发生的情况是没有供应商,但我们仍然希望剩下的信息因此是左外连接。
我现在试图重现这就是:
_uow.PartService
.Get()
.Where(p => p.RefCategory.Equals(level2))
.Join(_uow.PartPlantService.Get(),
p => new { p.PartNum, p.Company },
pp => new { pp.PartNum, pp.Company },
(p, pp) => new { Part = p, PartPlant = pp })
.GroupJoin(_uow.VendorService.Get(),
pprc => pprc.PartPlant.VendorNum,
v => v.VendorNum,
(pprc, v) => new { PPRC = pprc, V = v });
我知道,选择没有返回的时刻相同的字段。现在我已经忽略了这一点,因为我正在努力确保首先获得正确的值。
SQL查询返回41条记录,其中1条记录具有空供应商。 linq查询返回40条记录,显然不会返回具有空供应商的记录。我尝试过使用GroupJoin()
和DefaultIfEmpty()
,但我无法使其工作。
任何帮助将不胜感激。
https://code.msdn.microsoft.com/LINQ-Join-Operators-dabef4e9#leftouterjoin –
那并没有真正提供很多信息。从研究中我发现正确的方法是使用'GroupJoin()',为什么我采取了这种方法。你能解释一下你期望我从中获得什么,而不仅仅是提供一个链接吗? – DaRoGa
https://stackoverflow.com/questions/3404975/left-outer-join-in-linq?rq=1 – Mixxiphoid