你想要做的是一個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;
這很正常,這就是連接(和SQL連接多年)的工作原理。問題是你想達到什麼目的? –
@IvanStoev所以你的意思是我不能只有一個結果? –
但當我在ui中調用我的函數時:List lstMaterialRequestContractorDetails = _reportMaterialRequestContractorRepository.ShowReport(Id).Distinct()。ToList();結果變成了兩個相似的記錄。我在表格中有兩條記錄 –