2015-10-20 80 views
-1

我是新來的LINQ,所以我提前道歉,如果它是一個愚蠢的問題。我繼承了下面的查詢,並且它沒有產生正確的結果來修復它,我必須理解它在做什麼。 這裏是查詢,如果有人可以向我解釋它在做什麼(也可能修復它),將不勝感激。LINQ聲明與條件選擇從表

**using (var dbCtx = new TLMDbContext()) 
    { 
    var dvps = dbCtx.tblDVPTests.Where(x => x.DVPID == 2176); 
// these 2 following if conditions doesnt bring correct result sets 
    if (dvpMasterPhaseId.HasValue) 
    { 
     dvps = dvps.Where(x => x.tblDVPPhases.All(p => p.DVPMasterPhaseID ==255)); 
    } 
    if (dvpMasterVariantId.HasValue) 
    { 
     dvps = dvps.Where(x => x.tblDVPPhases.All(p => p.tblDVPVariants.All(v=>v.DVPMasterVariantID==681))); 
    } 
}** 

UPDATE 我想寫成LINQ這下面的查詢,如果你們的一個告訴我什麼是錯的LINQ查詢上面將是巨大的。

SELECT * FROM tblDVPTest 內部聯接tblDVPPhase上tblDVPTest.DVPTestID = tblDVPPhase.DVPTestID 其中dvpid = 2176和tblDVPPhase.DVPMasterPhaseID = 255 這裏是與兩個條件

SELECT * FROM tblDVPTest 內部聯接tblDVPPhase上tblDVPTest.DVPTestID = tblDVPPhase.DVPTestID 內部聯接tblDVPVariant上tblDVPPhase.DVPPhaseID = tblDVPVariant.DVPPhaseID 其中dvpid = 2176和tblDVPPhase.DVPMasterPhaseID = 255和tblDVPVariant.DVPMasterVariantID = 681

+0

我們肯定需要更多的信息,而不是幫助。你說條件不會帶來正確的結果。你在期待什麼?究竟發生了什麼? –

+0

如果你們可以幫助我瞭解發生的事情會很棒。想法是這第一個過濾器 – user2954221

+0

我轉貼在以下http://stackoverflow.com/questions/33301930/linq-delima-to-convert-sql-into-linq – user2954221

回答

0

甲我可以從代碼中理解,您正在使用實體框架與數據庫進行交互。以下是一個高級解釋:

  1. 創建DbContext對象。
  2. 選擇從表tblDVPTests到變量dvps的所有內容,其中表tblDVPTests的列DVPID與變量dvpNum的值匹配。
  3. 如果爲空的變量dvpMasterPhaseId不爲空,然後只選擇那些dvps值,其中參考表tblDVPPhases具有柱DVPMasterPhaseID具有可變dvpMasterPhaseId值值匹配的所有行。請將結果保存在dvps。如果變量dvpMasterPhaseId爲空,則跳過此步驟。
  4. 如果爲空的變量dvpMasterVariantId不爲空,然後只選擇那些dvps值,其中參考表tblDVPPhases具有柱DVPMasterVariantID具有可變dvpMasterVariantId值值匹配的所有行。請將結果保存在dvps。如果變量dvpMasterVariantId爲空,則跳過此步驟。
  5. 配置DbCOntext對象。

注意:表tblDVPTeststblDVPPhases之間存在外鍵關係。

首先要解決您的問題,您應該讓我們知道您在結果中究竟期待什麼。

+0

謝謝。讓我看看我期待的結果是什麼,然後我會問我該如何實現這一目標。 – user2954221