我想弄清楚如何在vb.net中进行正确的加入我尝试了几种不同的方法,但都没有效果。
Dim query = From I In db.scll_label Where I.scll_transactiondate >= fromDate And I.scll_transactiondate <= toDate
Join p In db.pt_mstr.Where(Function(pt) pt.pt_domain = "mueller") On I.scll_part Equals p.pt_part
Join c In db.sclws_cfg.Where(Function(wk) wk.sclws_domain = "mueller") On I.scll_wsid Equals c.sclws_id
Select New ShiftAdjustedModel With
{.Label = I,
.TransactionDate = I.scll_transactiondate,
.PartLength = p.pt_length,
.PartNetWeight = p.pt_net_wt,
.PartDescription = p.pt_desc1,
.PartTolHigh = p.pt_tol_high,
.PartType = p.pt_part_type,
.PartUM = p.pt_um,
.ProjCode = c.sclws_proj_code,
.Site = c.sclws_site}
输出sql
SELECT
[Extent1].[scll_ticket] AS [scll_ticket],
[Extent1].[scll_domain] AS [scll_domain],
[Extent1].[scll_site] AS [scll_site],
[Extent1].[scll_part] AS [scll_part],
[Extent1].[scll_qty] AS [scll_qty],
[Extent1].[scll_weight] AS [scll_weight],
[Extent1].[scll_transactiondate] AS [scll_transactiondate],
[Extent1].[scll_transactiontime] AS [scll_transactiontime],
[Extent1].[scll_shift] AS [scll_shift],
[Extent1].[scll_pcs_bundle] AS [scll_pcs_bundle],
[Extent1].[scll_bundle_lift] AS [scll_bundle_lift],
[Extent1].[scll_cust] AS [scll_cust],
[Extent1].[scll_wsid] AS [scll_wsid],
[Extent1].[scll_userid] AS [scll_userid],
[Extent1].[scll_remarks] AS [scll_remarks],
[Extent1].[scll_calc_weight] AS [scll_calc_weight],
[Extent1].[scll_total_feet] AS [scll_total_feet],
[Extent1].[scll_tolerance] AS [scll_tolerance],
[Extent1].[scll_drawlite_factor] AS [scll_drawlite_factor],
[Extent1].[scll_total_tare] AS [scll_total_tare],
[Extent1].[scll_tare_detail] AS [scll_tare_detail],
[Extent1].[scll_out_of_tolerance] AS [scll_out_of_tolerance],
[Extent1].[scll_tolerance_low] AS [scll_tolerance_low],
[Extent1].[scll_tolerance_high] AS [scll_tolerance_high],
[Extent1].[scll_std_weight] AS [scll_std_weight],
[Extent2].[pt_length] AS [pt_length],
[Extent2].[pt_net_wt] AS [pt_net_wt],
[Extent2].[pt_desc1] AS [pt_desc1],
[Extent2].[pt_tol_high] AS [pt_tol_high],
[Extent2].[pt_part_type] AS [pt_part_type],
[Extent2].[pt_um] AS [pt_um],
[Extent3].[sclws_proj_code] AS [sclws_proj_code],
[Extent3].[sclws_site] AS [sclws_site]
FROM [dbo].[scll_label] AS [Extent1]
INNER JOIN [dbo].[pt_mstr] AS [Extent2] ON [Extent1].[scll_part] = [Extent2].[pt_part]
INNER JOIN [dbo].[sclws_cfg] AS [Extent3] ON [Extent1].[scll_wsid] = [Extent3].[sclws_id]
WHERE ([Extent1].[scll_transactiondate] >= @p__linq__0) AND ([Extent1].[scll_transactiondate] <= @p__linq__1) AND ('mueller' = [Extent2].[pt_domain]) AND ('mueller' = [Extent3].[sclws_domain])
如果我使用此查询
Dim query = From I In db.scll_label Where I.scll_transactiondate >= fromDate And I.scll_transactiondate <= toDate
Group Join p In db.pt_mstr.Where(Function(pt) pt.pt_domain = "mueller") On I.scll_part Equals p.pt_part Into parts = Group
Group Join c In db.sclws_cfg.Where(Function(wk) wk.sclws_domain = "mueller") On I.scll_wsid Equals c.sclws_id Into workstations = Group
From p In parts.DefaultIfEmpty From c In workstations.DefaultIfEmpty
Select New ShiftAdjustedModel With
{.Label = I,
.TransactionDate = I.scll_transactiondate,
.PartLength = p.pt_length,
.PartNetWeight = p.pt_net_wt,
.PartDescription = p.pt_desc1,
.PartTolHigh = p.pt_tol_high,
.PartType = p.pt_part_type,
.PartUM = p.pt_um,
.ProjCode = c.sclws_proj_code,
.Site = c.sclws_site}
我得到了这个输出
SELECT
[Extent1].[scll_ticket] AS [scll_ticket],
[Extent1].[scll_domain] AS [scll_domain],
[Extent1].[scll_site] AS [scll_site],
[Extent1].[scll_part] AS [scll_part],
[Extent1].[scll_qty] AS [scll_qty],
[Extent1].[scll_weight] AS [scll_weight],
[Extent1].[scll_transactiondate] AS [scll_transactiondate],
[Extent1].[scll_transactiontime] AS [scll_transactiontime],
[Extent1].[scll_shift] AS [scll_shift],
[Extent1].[scll_pcs_bundle] AS [scll_pcs_bundle],
[Extent1].[scll_bundle_lift] AS [scll_bundle_lift],
[Extent1].[scll_cust] AS [scll_cust],
[Extent1].[scll_wsid] AS [scll_wsid],
[Extent1].[scll_userid] AS [scll_userid],
[Extent1].[scll_remarks] AS [scll_remarks],
[Extent1].[scll_calc_weight] AS [scll_calc_weight],
[Extent1].[scll_total_feet] AS [scll_total_feet],
[Extent1].[scll_tolerance] AS [scll_tolerance],
[Extent1].[scll_drawlite_factor] AS [scll_drawlite_factor],
[Extent1].[scll_total_tare] AS [scll_total_tare],
[Extent1].[scll_tare_detail] AS [scll_tare_detail],
[Extent1].[scll_out_of_tolerance] AS [scll_out_of_tolerance],
[Extent1].[scll_tolerance_low] AS [scll_tolerance_low],
[Extent1].[scll_tolerance_high] AS [scll_tolerance_high],
[Extent1].[scll_std_weight] AS [scll_std_weight],
[Extent2].[pt_length] AS [pt_length],
[Extent2].[pt_net_wt] AS [pt_net_wt],
[Extent2].[pt_desc1] AS [pt_desc1],
[Extent2].[pt_tol_high] AS [pt_tol_high],
[Extent2].[pt_part_type] AS [pt_part_type],
[Extent2].[pt_um] AS [pt_um],
[Extent3].[sclws_proj_code] AS [sclws_proj_code],
[Extent3].[sclws_site] AS [sclws_site]
FROM [dbo].[scll_label] AS [Extent1]
LEFT OUTER JOIN [dbo].[pt_mstr] AS [Extent2] ON ('mueller' = [Extent2].[pt_domain]) AND ([Extent1].[scll_part] = [Extent2].[pt_part])
LEFT OUTER JOIN [dbo].[sclws_cfg] AS [Extent3] ON ('mueller' = [Extent3].[sclws_domain]) AND ([Extent1].[scll_wsid] = [Extent3].[sclws_id])
WHERE ([Extent1].[scll_transactiondate] >= @p__linq__0) AND ([Extent1].[scll_transactiondate] <= @p__linq__1)
我只想在两个表上进行右外连接,将其转换为左外连接。即使我从正确连接的表开始,因为很多帖子都建议我使用交叉连接和联合而不是右连接来获得奇怪的SQL。