簡體   English   中英

LINQ多個連接與一個左連接

[英]LINQ multiple joins with one left join

我是LINQ的新手,我正在努力做一個多重JOIN。 所以,這就是我的數據庫結構的樣子:

在此輸入圖像描述

現在,我的查詢應該如何,如果我有一個特定的成績,我想選擇{Student.IndexNo,GradeValue.Value},但如果特定成績和特定用戶沒有成績值,則應返回null(左連接)?

獲得LEFT連接的技巧是使用DefaultIfEmpty()方法:

var otherValue = 5;

var deps = from tbl1 in Table1
           join tbl2 in Table2
              on tbl1.Key equals tbl2.Key into joinGroup
           from j in joinGroup.DefaultIfEmpty()
           where 
               j.SomeProperty == "Some Value"
               && tbl1.OtherProperty == otherValue
           select j;

故意在2015年為新手尋找谷歌點擊解決方案。 我設法破解和削減編程我的方式進入解決方案。

var projDetails = from r in entities.ProjekRumah
join d in entities.StateDistricts on r.ProjekLocationID equals d.DistrictID
join j in entities.ProjekJenis on r.ProjekTypeID equals j.TypeID
join s in entities.ProjekStatus on r.ProjekStatusID equals s.StatusID
join approvalDetails in entities.ProjekApproval on r.ProjekID equals approvalDetails.ProjekID into approvalDetailsGroup
from a in approvalDetailsGroup.DefaultIfEmpty()
select new ProjectDetailsDTO()
       {
        ProjekID = r.ProjekID,
        ProjekName = r.ProjekName,
        ProjekDistrictName = d.DistrictName,
        ProjekTypeName = j.TypeName,
        ProjekStatusName = s.StatusName,
        IsApprovalAccepted = a.IsApprovalAccepted ? "Approved" : "Draft",
        ProjekApprovalRemarks = a.ApprovalRemarks
};

在內部生成以下SQL代碼

{SELECT [Extent1].[ProjekID] AS [ProjekID]
    ,[Extent1].[ProjekName] AS [ProjekName]
    ,[Extent2].[DistrictName] AS [DistrictName]
    ,[Extent3].[TypeName] AS [TypeName]
    ,[Extent4].[StatusName] AS [StatusName]
    ,CASE 
        WHEN ([Extent5].[IsApprovalAccepted] = 1)
            THEN N'Approved'
        ELSE N'Draft'
        END AS [C1]
    ,[Extent5].[ApprovalRemarks] AS [ApprovalRemarks]
FROM [dbo].[ProjekRumah] AS [Extent1]
INNER JOIN [dbo].[StateDistricts] AS [Extent2] ON [Extent1].[ProjekLocationID] = [Extent2].[DistrictID]
INNER JOIN [dbo].[ProjekJenis] AS [Extent3] ON [Extent1].[ProjekTypeID] = [Extent3].[TypeID]
INNER JOIN [dbo].[ProjekStatus] AS [Extent4] ON [Extent1].[ProjekStatusID] = [Extent4].[StatusID]
LEFT JOIN [dbo].[ProjekApproval] AS [Extent5] ON [Extent1].[ProjekID] = [Extent5].[ProjekID] 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM