LINQ to Entities Right加入VB.NET

时间:2014-10-07 17:07:15

标签: sql vb.net linq

我想弄清楚如何在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。

0 个答案:

没有答案