聯合

2016-08-23 15 views
0

我有這個疑問:聯合

from m in _ctx.MaterialRequestContractorDetails 
where m.MaterialRequestContractorId == MRCId 
join mat in _ctx.MaterialDescriptions on m.MaterialDescriptionId equals mat.Id 
join l in _ctx.Lines on m.LineId equals l.Id 
join sheet in _ctx.Sheets on m.SheetId equals sheet.Id 
join joint in _ctx.Joints on m.SheetId equals joint.SheetId 
join testjoint in _ctx.TestPackageJoints on joint.Id equals testjoint.Id 
join testpack in _ctx.TestPackages on testjoint.TestPackageId equals testpack.Id 

我之間的連接:

  • MaterialRequestContractorDetailssheet
  • MaterialRequestContractorDetailsline

但我沒有MaterialRequestContractorDetailstestpackage之間的連接。

我可以使用jointtestpackagejointtestpackage的連接,但這種連接使得一個問題,我的記錄基於joint一行類似的數據重複

我的意思是,如果我在我的關節表有2條記錄,我結果用相似的數據重複2次。

+0

這很正常,這就是連接(和SQL連接多年)的工作原理。問題是你想達到什麼目的? –

+0

@IvanStoev所以你的意思是我不能只有一個結果? –

+0

但當我在ui中調用我的函數時:List lstMaterialRequestContractorDetails = _reportMaterialRequestContractorRepository.ShowReport(Id).Distinct()。ToList();結果變成了兩個相似的記錄。我在表格中有兩條記錄 –

回答

0

你想要做的是一個GroupJoin函數。在查詢語法,它看起來就像這樣:

var result = (from m in MaterialRequestContractorDetails 
       where m.MaterialRequestContractorId == MRCId 

       join mat in MaterialDescriptions on m.MaterialDescriptionId equals mat.Id 
       join l in Lines on m.LineId equals l.Id 
       join sheet in Sheets on m.SheetId equals sheet.Id 

       join joint in (from joint in Joints 
          join testjoint in TestPackageJoints on joint.Id equals testjoint.Id 
          join testpack in TestPackages on testjoint.TestPackageId equals testpack.Id 
          select new { joint.SheetId, testpack }) 

       on m.SheetId equals joint.SheetId into tt 

       select new { Details = m, Line = l, TestPacks = tt.Select(x => x.testpack).ToList() }).ToList(); 

我其實根本是獨立所有的「下半場」的加入到嵌套查詢,然後與主要部分加入了它,但這樣做時使用into關鍵字(GroupJoin)。

隨着測試數據的波動,我得到了1條記錄,其中MRCId爲1,並且記錄中有一個包含2項的TestPackage的列表。

List<dynamic> MaterialRequestContractorDetails = new List<dynamic> 
{ 
    new { MaterialRequestContractorId = 1, MaterialDescriptionId = 1, LineId = 1, SheetId = 1}, 
    new { MaterialRequestContractorId = 2, MaterialDescriptionId = 2, LineId = 2, SheetId = 2}, 
}; 

List<dynamic> MaterialDescriptions = new List<dynamic> 
{ 
    new { Id = 1 }, new { Id = 2 }, 
}; 

List<dynamic> Lines = new List<dynamic> { new { Id = 1 } }; 
List<dynamic> Sheets = new List<dynamic> { new { Id = 1 } }; 
List<dynamic> Joints = new List<dynamic> { new { SheetId = 1, Id = 1 } }; 

List<dynamic> TestPackageJoints = new List<dynamic> 
{ 
    new { Id = 1, TestPackageId = 1 }, 
    new { Id = 1, TestPackageId = 2 }, 
}; 

List<dynamic> TestPackages = new List<dynamic> 
{ 
    new { Id = 1 }, new { Id = 2 }, 
}; 

int MRCId = 1; 
+0

嗨。請你看看這個:http://stackoverflow.com/questions/39243771/efficiently-convert-rows-to-columns-in-sql-server-view –

+0

@EhsanAkbar - 將檢查:) –

+0

夥計太謝謝你了 –