2017-05-03 19 views
0

我有多個連接和2組連接的查詢。該組加入的是可添加1個或更多記錄的子記錄,並且我想將它們全部顯示出來。 該查詢有效,但速度非常慢。 當使用多於一個組連接時,實體框架將其作爲union all寫入。這是我不明白的地方。 有沒有一種方法來重寫查詢,以便ef不會將它寫爲union all?還是我必須找到另一種解決方案?爲什麼實體框架Lambda將2個組聯接轉換爲Union All?

這是拉姆達代碼

var query = db.DocumentModsums 
       .Join(db.Documents, 
        data => data.DocumentId, 
        d => d.Id, 
        (data, d) => new 
        { 
         DocumentModsum = data, 
         Document = d, 
        }) 
       .Join(db.Modsums, 
        data => data.DocumentModsum.ModsumId, 
        m => m.Id, 
        (data, m) => new 
        { 
         DocumentModsum = data.DocumentModsum, 
         Document = data.Document, 
         Modsum = m, 
        }) 
       .Join(db.MethodsOwnerships, 
        data => data.Document.MethodsOwnershipId, 
        mo => mo.Id, 
        (data, mo) => new 
        { 
         DocumentModsum = data.DocumentModsum, 
         Document = data.Document, 
         Modsum = data.Modsum, 
         MethodsOwnership = mo, 
        }) 
       .Join(db.DocumentStatus, 
        data => data.Document.DocumentStatusId, 
        ds => ds.Id, 
        (data, ds) => new 
        { 
         DocumentModsum = data.DocumentModsum, 
         Document = data.Document, 
         Modsum = data.Modsum, 
         MethodsOwnership = data.MethodsOwnership, 
         DocumentStatus = ds, 
        }) 
       .Join(db.DocumentTypes, 
        data => data.Document.DocumentTypeId, 
        dt => dt.Id, 
        (data, dt) => new 
        { 
         DocumentModsum = data.DocumentModsum, 
         Document = data.Document, 
         Modsum = data.Modsum, 
         MethodsOwnership = data.MethodsOwnership, 
         DocumentStatus = data.DocumentStatus, 
         DocumentType = dt, 
        }) 
       .Join(db.ModsumStatus, 
        data => data.Modsum.ModsumStatusId, 
        ms => ms.Id, 
        (data, ms) => new 
        { 
         DocumentModsum = data.DocumentModsum, 
         Document = data.Document, 
         Modsum = data.Modsum, 
         MethodsOwnership = data.MethodsOwnership, 
         DocumentStatus = data.DocumentStatus, 
         DocumentType = data.DocumentType, 
         ModsumStatus = ms, 
        }) 
       .Join(db.ModsumTypes, 
        data => data.Modsum.ModsumTypeId, 
        mt => mt.Id, 
        (data, mt) => new 
        { 
         DocumentModsum = data.DocumentModsum, 
         Document = data.Document, 
         Modsum = data.Modsum, 
         MethodsOwnership = data.MethodsOwnership, 
         DocumentStatus = data.DocumentStatus, 
         DocumentType = data.DocumentType, 
         ModsumStatus = data.ModsumStatus, 
         ModsumType = mt, 
        }) 
       .GroupJoin(db.SummaryOfActions, 
        data => data.Document.Id, 
        soa => soa.DocumentId, 
        (data, soa) => new 
        { 
         DocumentModsum = data.DocumentModsum, 
         Document = data.Document, 
         Modsum = data.Modsum, 
         MethodsOwnership = data.MethodsOwnership, 
         DocumentStatus = data.DocumentStatus, 
         DocumentType = data.DocumentType, 
         ModsumStatus = data.ModsumStatus, 
         ModsumType = data.ModsumType, 
         CIN = soa.Join(db.CINs, 
           soa2 => soa2.CINId, 
           cin2 => cin2.Id, 
           (soa2, cin2) => new 
           { 
            CIN = cin2, 
            SOA = soa2 
           } 
           ).Where(s => s.SOA.DeletedAt == null && s.CIN.DeletedAt == null) 
           .GroupBy(c => new { c.CIN.CINName }) 
           .Select(c => c.Key.CINName) 
           .ToList() 

        })      
       .GroupJoin(
        db.ModsumEffectivities, 
        data => data.Modsum.Id, 
        me => me.ModsumId, 
        (data, me) => new 
        { 
         Data = data, 
         ModsumEffectivity = me.Where(meff => meff.DeletedAt == null).Select(m2 => new ModsumEffectivityVM() 
         { 
          AircraftFrom = m2.AircraftFromId.ToString(), 
          AircraftFromId = m2.AircraftFromId, 
          AircraftTo = m2.AircraftToId.ToString(), 
          AircraftToId = m2.AircraftToId,         
          AircraftModelId = m2.AircraftModelId 
         }) 
         .ToList() 
        })      
       .Where(dm => dm.Data.DocumentModsum.DeletedAt == null 
        && dm.Data.Document.DeletedAt == null 
        && dm.Data.Modsum.DeletedAt == null 
        && dm.Data.MethodsOwnership.DeletedAt == null 
        && dm.Data.DocumentStatus.DeletedAt == null 
        && dm.Data.DocumentType.DeletedAt == null 
        && dm.Data.ModsumStatus.DeletedAt == null 
        && dm.Data.ModsumType.DeletedAt == null 
       ) 
       .Select(data => new DocumentVM() 
       { 
        Id = data.Data.DocumentModsum.Id, 
        Status = data.Data.DocumentStatus.Description, 
        DocumentNumber = data.Data.Document.DocumentNumber, 
        DocumentRevision = data.Data.Document.DocumentRevision, 
        DocumentTitle = data.Data.Document.DocumentTitle, 
        ModsumNumber = data.Data.Modsum.ModsumNumber, 
        ModsumRevision = data.Data.Modsum.ModsumRevision, 
        ModsumTitle = data.Data.Modsum.ModsumTitle, 
        DocumentType = data.Data.DocumentType.Description, 
        MethodsOwnership = data.Data.MethodsOwnership.Description, 
        ModsumReleaseDate = data.Data.Modsum.MSReleaseDate, 
        ModsumAuthority = data.Data.Modsum.Authority ?? "", 
        CreatedAt = data.Data.DocumentModsum.CreatedAt, 
        CIN = data.Data.Document.CIN, 
        CINList = data.Data.CIN, 
        ModsumEffectivity = data.ModsumEffectivity,       
       }).ToList(); 

此轉換成

SELECT 
[UnionAll1].[Id] AS [C1], 
[UnionAll1].[Id1] AS [C2], 
[UnionAll1].[Id2] AS [C3], 
[UnionAll1].[Id3] AS [C4], 
[UnionAll1].[Id4] AS [C5], 
[UnionAll1].[Id5] AS [C6], 
[UnionAll1].[Id6] AS [C7], 
[UnionAll1].[C2] AS [C8], 
[UnionAll1].[Id7] AS [C9], 
[UnionAll1].[Description] AS [C10], 
[UnionAll1].[DocumentNumber] AS [C11], 
[UnionAll1].[DocumentRevision] AS [C12], 
[UnionAll1].[DocumentTitle] AS [C13], 
[UnionAll1].[ModsumNumber] AS [C14], 
[UnionAll1].[ModsumRevision] AS [C15], 
[UnionAll1].[ModsumTitle] AS [C16], 
[UnionAll1].[Description1] AS [C17], 
[UnionAll1].[Description2] AS [C18], 
[UnionAll1].[MSReleaseDate1] AS [C19], 
[UnionAll1].[C3] AS [C20], 
[UnionAll1].[CreatedAt] AS [C21], 
[UnionAll1].[CIN] AS [C22], 
[UnionAll1].[C1] AS [C23], 
[UnionAll1].[CINName] AS [C24], 
[UnionAll1].[C4] AS [C25], 
[UnionAll1].[C5] AS [C26] 
FROM (SELECT 
    [Project3].[C1] AS [C1], 
    [Limit1].[MSReleaseDate] AS [MSReleaseDate], 
    [Limit1].[Id3] AS [Id], 
    [Limit1].[Id4] AS [Id1], 
    [Limit1].[Id5] AS [Id2], 
    [Limit1].[Id6] AS [Id3], 
    [Limit1].[Id7] AS [Id4], 
    [Limit1].[Id1] AS [Id5], 
    [Limit1].[Id2] AS [Id6], 
    [Limit1].[C1] AS [C2], 
    [Limit1].[Id] AS [Id7], 
    [Limit1].[Description1] AS [Description], 
    [Limit1].[DocumentNumber] AS [DocumentNumber], 
    [Limit1].[DocumentRevision] AS [DocumentRevision], 
    [Limit1].[DocumentTitle] AS [DocumentTitle], 
    [Limit1].[ModsumNumber] AS [ModsumNumber], 
    [Limit1].[ModsumRevision] AS [ModsumRevision], 
    [Limit1].[ModsumTitle] AS [ModsumTitle], 
    [Limit1].[Description2] AS [Description1], 
    [Limit1].[Description] AS [Description2], 
    [Limit1].[MSReleaseDate] AS [MSReleaseDate1], 
    [Limit1].[C2] AS [C3], 
    [Limit1].[CreatedAt] AS [CreatedAt], 
    [Limit1].[CIN] AS [CIN], 
    [Project3].[CINName] AS [CINName], 
    CAST(NULL AS int) AS [C4], 
    CAST(NULL AS bit) AS [C5] 
    FROM (SELECT [Project1].[Id] AS [Id], [Project1].[CreatedAt] AS [CreatedAt], [Project1].[Id1] AS [Id1], [Project1].[DocumentNumber] AS [DocumentNumber], [Project1].[DocumentRevision] AS [DocumentRevision], [Project1].[DocumentTitle] AS [DocumentTitle], [Project1].[CIN] AS [CIN], [Project1].[Id2] AS [Id2], [Project1].[ModsumNumber] AS [ModsumNumber], [Project1].[ModsumRevision] AS [ModsumRevision], [Project1].[ModsumTitle] AS [ModsumTitle], [Project1].[MSReleaseDate] AS [MSReleaseDate], [Project1].[Id3] AS [Id3], [Project1].[Description] AS [Description], [Project1].[Id4] AS [Id4], [Project1].[Description1] AS [Description1], [Project1].[Id5] AS [Id5], [Project1].[Description2] AS [Description2], [Project1].[Id6] AS [Id6], [Project1].[Id7] AS [Id7], [Project1].[C1] AS [C1], [Project1].[C2] AS [C2] 
     FROM (SELECT 
      [Filter1].[Id8] AS [Id], 
      [Filter1].[CreatedAt1] AS [CreatedAt], 
      [Filter1].[Id9] AS [Id1], 
      [Filter1].[DocumentNumber] AS [DocumentNumber], 
      [Filter1].[DocumentRevision] AS [DocumentRevision], 
      [Filter1].[DocumentTitle] AS [DocumentTitle], 
      [Filter1].[CIN] AS [CIN], 
      [Filter1].[Id10] AS [Id2], 
      [Filter1].[ModsumNumber] AS [ModsumNumber], 
      [Filter1].[ModsumRevision] AS [ModsumRevision], 
      [Filter1].[ModsumTitle] AS [ModsumTitle], 
      [Filter1].[MSReleaseDate] AS [MSReleaseDate], 
      [Filter1].[Id11] AS [Id3], 
      [Filter1].[Description3] AS [Description], 
      [Filter1].[Id12] AS [Id4], 
      [Filter1].[Description4] AS [Description1], 
      [Filter1].[Id13] AS [Id5], 
      [Filter1].[Description5] AS [Description2], 
      [Filter1].[Id14] AS [Id6], 
      [Extent8].[Id] AS [Id7], 
      1 AS [C1], 
      CASE WHEN ([Filter1].[Authority] IS NULL) THEN N'' ELSE [Filter1].[Authority] END AS [C2] 
      FROM (SELECT [Extent1].[Id] AS [Id8], [Extent1].[CreatedAt] AS [CreatedAt1], [Extent2].[Id] AS [Id9], [Extent2].[DocumentNumber] AS [DocumentNumber], [Extent2].[DocumentRevision] AS [DocumentRevision], [Extent2].[DocumentTitle] AS [DocumentTitle], [Extent2].[CIN] AS [CIN], [Extent3].[Id] AS [Id10], [Extent3].[ModsumNumber] AS [ModsumNumber], [Extent3].[ModsumRevision] AS [ModsumRevision], [Extent3].[ModsumTitle] AS [ModsumTitle], [Extent3].[MSReleaseDate] AS [MSReleaseDate], [Extent3].[ModsumTypeId] AS [ModsumTypeId], [Extent3].[Authority] AS [Authority], [Extent4].[Id] AS [Id11], [Extent4].[Description] AS [Description3], [Extent5].[Id] AS [Id12], [Extent5].[Description] AS [Description4], [Extent6].[Id] AS [Id13], [Extent6].[Description] AS [Description5], [Extent7].[Id] AS [Id14] 
       FROM  [dbo].[DocumentModsums] AS [Extent1] 
       INNER JOIN [dbo].[Documents] AS [Extent2] ON [Extent1].[DocumentId] = [Extent2].[Id] 
       INNER JOIN [dbo].[Modsums] AS [Extent3] ON [Extent1].[ModsumId] = [Extent3].[Id] 
       INNER JOIN [dbo].[MethodsOwnerships] AS [Extent4] ON [Extent2].[MethodsOwnershipId] = [Extent4].[Id] 
       INNER JOIN [dbo].[DocumentStatus] AS [Extent5] ON [Extent2].[DocumentStatusId] = [Extent5].[Id] 
       INNER JOIN [dbo].[DocumentTypes] AS [Extent6] ON [Extent2].[DocumentTypeId] = [Extent6].[Id] 
       INNER JOIN [dbo].[ModsumStatus] AS [Extent7] ON [Extent3].[ModsumStatusId] = [Extent7].[Id] 
       WHERE ([Extent1].[DeletedAt] IS NULL) AND ([Extent2].[DeletedAt] IS NULL) AND ([Extent3].[DeletedAt] IS NULL) AND ([Extent4].[DeletedAt] IS NULL) AND ([Extent5].[DeletedAt] IS NULL) AND ([Extent6].[DeletedAt] IS NULL) AND ([Extent7].[DeletedAt] IS NULL)) AS [Filter1] 
      INNER JOIN [dbo].[ModsumTypes] AS [Extent8] ON [Filter1].[ModsumTypeId] = [Extent8].[Id] 
      WHERE [Extent8].[DeletedAt] IS NULL 
     ) AS [Project1] 
     ORDER BY [Project1].[MSReleaseDate] DESC 
     OFFSET 0 ROWS FETCH NEXT 25 ROWS ONLY ) AS [Limit1] 
    OUTER APPLY (SELECT 
     [Distinct1].[CINName] AS [CINName], 
     1 AS [C1] 
     FROM (SELECT DISTINCT 
      [Extent10].[CINName] AS [CINName] 
      FROM [dbo].[SummaryOfActions] AS [Extent9] 
      INNER JOIN [dbo].[CINs] AS [Extent10] ON [Extent9].[CINId] = [Extent10].[Id] 
      WHERE ([Limit1].[Id1] = [Extent9].[DocumentId]) AND ([Extent9].[DeletedAt] IS NULL) AND ([Extent10].[DeletedAt] IS NULL) 
     ) AS [Distinct1]) AS [Project3] 
UNION ALL 
    SELECT 
    2 AS [C1], 
    [Limit2].[MSReleaseDate] AS [MSReleaseDate], 
    [Limit2].[Id3] AS [Id], 
    [Limit2].[Id4] AS [Id1], 
    [Limit2].[Id5] AS [Id2], 
    [Limit2].[Id6] AS [Id3], 
    [Limit2].[Id7] AS [Id4], 
    [Limit2].[Id1] AS [Id5], 
    [Limit2].[Id2] AS [Id6], 
    [Limit2].[Id] AS [Id7], 
    [Limit2].[Id] AS [Id8], 
    [Limit2].[Description1] AS [Description], 
    [Limit2].[DocumentNumber] AS [DocumentNumber], 
    [Limit2].[DocumentRevision] AS [DocumentRevision], 
    [Limit2].[DocumentTitle] AS [DocumentTitle], 
    [Limit2].[ModsumNumber] AS [ModsumNumber], 
    [Limit2].[ModsumRevision] AS [ModsumRevision], 
    [Limit2].[ModsumTitle] AS [ModsumTitle], 
    [Limit2].[Description2] AS [Description1], 
    [Limit2].[Description] AS [Description2], 
    [Limit2].[MSReleaseDate] AS [MSReleaseDate1], 
    [Limit2].[C1] AS [C2], 
    [Limit2].[CreatedAt] AS [CreatedAt], 
    [Limit2].[CIN] AS [CIN], 
    CAST(NULL AS varchar(1)) AS [C3], 
    [Extent19].[ModsumId] AS [ModsumId], 
    cast(1 as bit) AS [C4] 
    FROM (SELECT [Project5].[Id] AS [Id], [Project5].[CreatedAt] AS [CreatedAt], [Project5].[Id1] AS [Id1], [Project5].[DocumentNumber] AS [DocumentNumber], [Project5].[DocumentRevision] AS [DocumentRevision], [Project5].[DocumentTitle] AS [DocumentTitle], [Project5].[CIN] AS [CIN], [Project5].[Id2] AS [Id2], [Project5].[ModsumNumber] AS [ModsumNumber], [Project5].[ModsumRevision] AS [ModsumRevision], [Project5].[ModsumTitle] AS [ModsumTitle], [Project5].[MSReleaseDate] AS [MSReleaseDate], [Project5].[Id3] AS [Id3], [Project5].[Description] AS [Description], [Project5].[Id4] AS [Id4], [Project5].[Description1] AS [Description1], [Project5].[Id5] AS [Id5], [Project5].[Description2] AS [Description2], [Project5].[Id6] AS [Id6], [Project5].[Id7] AS [Id7], [Project5].[C1] AS [C1] 
     FROM (SELECT 
      [Filter4].[Id15] AS [Id], 
      [Filter4].[CreatedAt2] AS [CreatedAt], 
      [Filter4].[Id16] AS [Id1], 
      [Filter4].[DocumentNumber] AS [DocumentNumber], 
      [Filter4].[DocumentRevision] AS [DocumentRevision], 
      [Filter4].[DocumentTitle] AS [DocumentTitle], 
      [Filter4].[CIN] AS [CIN], 
      [Filter4].[Id17] AS [Id2], 
      [Filter4].[ModsumNumber] AS [ModsumNumber], 
      [Filter4].[ModsumRevision] AS [ModsumRevision], 
      [Filter4].[ModsumTitle] AS [ModsumTitle], 
      [Filter4].[MSReleaseDate] AS [MSReleaseDate], 
      [Filter4].[Id18] AS [Id3], 
      [Filter4].[Description6] AS [Description], 
      [Filter4].[Id19] AS [Id4], 
      [Filter4].[Description7] AS [Description1], 
      [Filter4].[Id20] AS [Id5], 
      [Filter4].[Description8] AS [Description2], 
      [Filter4].[Id21] AS [Id6], 
      [Extent18].[Id] AS [Id7], 
      CASE WHEN ([Filter4].[Authority] IS NULL) THEN N'' ELSE [Filter4].[Authority] END AS [C1] 
      FROM (SELECT [Extent11].[Id] AS [Id15], [Extent11].[CreatedAt] AS [CreatedAt2], [Extent12].[Id] AS [Id16], [Extent12].[DocumentNumber] AS [DocumentNumber], [Extent12].[DocumentRevision] AS [DocumentRevision], [Extent12].[DocumentTitle] AS [DocumentTitle], [Extent12].[CIN] AS [CIN], [Extent13].[Id] AS [Id17], [Extent13].[ModsumNumber] AS [ModsumNumber], [Extent13].[ModsumRevision] AS [ModsumRevision], [Extent13].[ModsumTitle] AS [ModsumTitle], [Extent13].[MSReleaseDate] AS [MSReleaseDate], [Extent13].[ModsumTypeId] AS [ModsumTypeId], [Extent13].[Authority] AS [Authority], [Extent14].[Id] AS [Id18], [Extent14].[Description] AS [Description6], [Extent15].[Id] AS [Id19], [Extent15].[Description] AS [Description7], [Extent16].[Id] AS [Id20], [Extent16].[Description] AS [Description8], [Extent17].[Id] AS [Id21] 
       FROM  [dbo].[DocumentModsums] AS [Extent11] 
       INNER JOIN [dbo].[Documents] AS [Extent12] ON [Extent11].[DocumentId] = [Extent12].[Id] 
       INNER JOIN [dbo].[Modsums] AS [Extent13] ON [Extent11].[ModsumId] = [Extent13].[Id] 
       INNER JOIN [dbo].[MethodsOwnerships] AS [Extent14] ON [Extent12].[MethodsOwnershipId] = [Extent14].[Id] 
       INNER JOIN [dbo].[DocumentStatus] AS [Extent15] ON [Extent12].[DocumentStatusId] = [Extent15].[Id] 
       INNER JOIN [dbo].[DocumentTypes] AS [Extent16] ON [Extent12].[DocumentTypeId] = [Extent16].[Id] 
       INNER JOIN [dbo].[ModsumStatus] AS [Extent17] ON [Extent13].[ModsumStatusId] = [Extent17].[Id] 
       WHERE ([Extent11].[DeletedAt] IS NULL) AND ([Extent12].[DeletedAt] IS NULL) AND ([Extent13].[DeletedAt] IS NULL) AND ([Extent14].[DeletedAt] IS NULL) AND ([Extent15].[DeletedAt] IS NULL) AND ([Extent16].[DeletedAt] IS NULL) AND ([Extent17].[DeletedAt] IS NULL)) AS [Filter4] 
      INNER JOIN [dbo].[ModsumTypes] AS [Extent18] ON [Filter4].[ModsumTypeId] = [Extent18].[Id] 
      WHERE [Extent18].[DeletedAt] IS NULL 
     ) AS [Project5] 
     ORDER BY [Project5].[MSReleaseDate] DESC 
     OFFSET 0 ROWS FETCH NEXT 25 ROWS ONLY ) AS [Limit2] 
    INNER JOIN [dbo].[ModsumEffectivities] AS [Extent19] ON [Limit2].[Id2] = [Extent19].[ModsumId]) AS [UnionAll1] 
ORDER BY [UnionAll1].[MSReleaseDate] DESC, [UnionAll1].[Id] ASC, [UnionAll1].[Id1] ASC, [UnionAll1].[Id2] ASC, [UnionAll1].[Id3] ASC, [UnionAll1].[Id4] ASC, [UnionAll1].[Id5] ASC, [UnionAll1].[Id6] ASC, [UnionAll1].[Id7] ASC, [UnionAll1].[C1] ASC 
+0

你有沒有考慮讓SQL Server中的觀點,即返回所需值。 Sql在處理連接方面比EF更好。 –

回答

0

EF,或者最奧姆斯說實話,他們通常會使用一個「安全」的方式來生成一個查詢。這意味着可能有更有效的方法來編寫相同的查詢,但它並不總是正確工作。這通常是生成的代碼的問題,當有解決方案涵蓋更多的場景時,它將在所有情況下應用。但是,正如您所指出的,可能有更好的方式來編寫lambda表達式並獲得更好的執行查詢。我看到了一些我可能會嘗試的事情,但是如果不首先創建一個EF代碼庫來複制您的設計,我無法確保它能夠正常工作。

換句話說,我會嘗試將組連接移到它所連接的表內。因此,SummaryOfActions的組連接將存在於文檔的連接中,並且ModsumEffectivities的組連接將存在於Modsums的連接中。

這是我能想到的唯一可能導致查詢以更高效的方式生成的事情。除非您希望它們使用與變量不同的名稱,否則您不需要指定名稱(new {foo = foo}),在創建匿名類型(new {foo})時, 。

我試圖讓這些更改在記事本中查詢因此可能會有一些錯誤,但這給一試...

var query = db.DocumentModsums 
    .Join(db.Documents, 
     data => data.DocumentId, 
     d => d.Id, 
     (data, doc) => new 
     { 
     DocumentModsum = data, 
     Document = new { 
      doc.MethodsOwnershipId, 
      doc.DocumentStatusId, 
      doc.DocumentTypeId, 
      doc.DeletedAt, 
      doc.DocumentNumber, 
      doc.DocumentRevision, 
      doc.DocumentTitle, 
      doc.CIN, 
      SoaCinNames = db.SummaryOfActions 
          .Join(db.CINs, soa => soa.CINId, cin => cin.Id, (soa, cin) => new { CIN = cin, SOA = soa }) 
          .Where(s => s.SOA.DocumentId == doc.Id && s.SOA.DeletedAt == null && s.CIN.DeletedAt == null) 
          .GroupBy(c => c.CIN.CINName) 
          .Select(c => c.Key)} 
     } 
    ) 
    .Join(db.Modsums, 
     data => data.DocumentModsum.ModsumId, 
     m => m.Id, 
     (data, mod) => new 
     { 
     data.DocumentModsum, 
     data.Document, 
     Modsum = new 
     { 
      mod.ModsumStatusId, 
      mod.ModsumTypeId, 
      mod.ModsumNumber, 
      mod.ModsumRevision, 
      mod.ModsumTitle, 
      mod.MSReleaseDate, 
      mod.Authority, 
      mod.DeletedAt, 
      Effectivities = db.ModsumEffectivities 
             .Where(me => me.ModsumId == mod.Id && me.DeletedAt == null) 
             .Select(m2 => new ModsumEffectivityVM 
             { 
              AircraftFrom = m2.AircraftFromId.ToString(), 
              AircraftFromId = m2.AircraftFromId, 
              AircraftTo = m2.AircraftToId.ToString(), 
              AircraftToId = m2.AircraftToId, 
              AircraftModelId = m2.AircraftModelId 
             }) 
     } 
     } 
    ) 
    .Join(db.MethodsOwnerships, 
     data => data.Document.MethodsOwnershipId, 
     mo => mo.Id, 
     (data, mo) => new 
     { 
     data.DocumentModsum, 
     data.Document, 
     data.Modsum, 
     MethodsOwnership = mo 
     }) 
    .Join(db.DocumentStatus, 
     data => data.Document.DocumentStatusId, 
     ds => ds.Id, 
     (data, ds) => new 
     { 
     data.DocumentModsum, 
     data.Document, 
     data.Modsum, 
     data.MethodsOwnership, 
     DocumentStatus = ds 
     }) 
    .Join(db.DocumentTypes, 
     data => data.Document.DocumentTypeId, 
     dt => dt.Id, 
     (data, dt) => new 
     { 
     data.DocumentModsum, 
     data.Document, 
     data.Modsum, 
     data.MethodsOwnership, 
     data.DocumentStatus, 
     DocumentType = dt 
     }) 
    .Join(db.ModsumStatus, 
     data => data.Modsum.ModsumStatusId, 
     ms => ms.Id, 
     (data, ms) => new 
     { 
     data.DocumentModsum, 
     data.Document, 
     data.Modsum, 
     data.MethodsOwnership, 
     data.DocumentStatus, 
     data.DocumentType, 
     ModsumStatus = ms 
     }) 
    .Join(db.ModsumTypes, 
     data => data.Modsum.ModsumTypeId, 
     mt => mt.Id, 
     (data, ModsumType) => new 
     { 
     data.DocumentModsum, 
     data.Document, 
     data.Modsum, 
     data.MethodsOwnership, 
     data.DocumentStatus, 
     data.DocumentType, 
     data.ModsumStatus, 
     ModsumType, 
     }) 
    .Where(data => data.DocumentModsum.DeletedAt == null 
        && data.Document.DeletedAt == null 
        && data.Modsum.DeletedAt == null 
        && data.MethodsOwnership.DeletedAt == null 
        && data.DocumentStatus.DeletedAt == null 
        && data.DocumentType.DeletedAt == null 
        && data.ModsumStatus.DeletedAt == null 
        && data.ModsumType.DeletedAt == null 
    ) 
    .Select(data => new DocumentVM() 
    { 
     Id = data.DocumentModsum.Id, 
     Status = data.DocumentStatus.Description, 
     DocumentNumber = data.Document.DocumentNumber, 
     DocumentRevision = data.Document.DocumentRevision, 
     DocumentTitle = data.Document.DocumentTitle, 
     ModsumNumber = data.Modsum.ModsumNumber, 
     ModsumRevision = data.Modsum.ModsumRevision, 
     ModsumTitle = data.Modsum.ModsumTitle, 
     DocumentType = data.DocumentType.Description, 
     MethodsOwnership = data.MethodsOwnership.Description, 
     ModsumReleaseDate = data.Modsum.MSReleaseDate, 
     ModsumAuthority = data.Modsum.Authority ?? "", 
     CreatedAt = data.DocumentModsum.CreatedAt, 
     CIN = data.Document.CIN, 
     CINList = data.Document.SoaCinNames.ToList(), 
     ModsumEffectivity = data.Modsum.Effectivities.ToList() 
    }).ToList(); 
+0

感謝您的回覆。但它仍然做同樣的事情。如果有一個組加入,那麼就沒有聯盟了,但是當我加入其他聯盟時,聯盟都會回來。我甚至嘗試在文檔和modsum連接內部進行組連接,但它仍然是同樣的事情。 –

+0

如果您嘗試了我發佈的內容,請忽略此評論的其餘部分,否則我上面的示例實際上沒有任何.GroupJoins,您應該嘗試一下。 – TwistedStem

+0

我確實嘗試了你的建議。它仍然把它變成一個聯盟全部。 –

相關問題