可以在没有数据集的实体框架中进行左连接

本文关键字:框架 连接 实体 数据集 | 更新日期: 2023-09-27 18:02:21

我有这个查询

return _ctx.TestPackages.Where(s => s.Id == TestPackageId).
        Join(_ctx.TestPackageReportDetails, s => s.Id, d => d.TestPackageId, (s, d) => new { reportDetail = d, testpack = s }).
        Join(_ctx.TestPackageReports, p => p.reportDetail.TestPackageReportId, o => o.Id, (p, o) => new { combined = p, report = o })
         .ToList()

可以看到,我的查询在3个表TestPackagesTestPackageReportDetailsTestPackageReports之间建立了连接。当我在TestPackageReportDetails中有多个具有相同testpackageid的记录时,结果在输出中重复3次。我怎样才能避免重复?

我应该在TestPackageReportDetails和TestPackages之间做一个左连接吗?如果有,我该怎么做?

可以在没有数据集的实体框架中进行左连接

如果你的目的是急于加载报告的详细信息,那么你应该使用。include:

_ctx.TestPackages.Include(t=>t.TestPackageReportDetails.TestPackageReports).Where(s => s.Id == TestPackageId);

因为您只选择了三个字段(如您再次编辑答案并删除选择之前所示),那么您可以这样做:

(from s in _ctx.TestPackages  
join d in _ctx.TestPackageReportDetails, 
on s.Id equals d.TestPackageId
join r in _ctx.TestPackageReports
on s.Id equals r.reportDetail.TestPackageReportId
where s.Id == TestPackageId
select new
{
  s.Id,
  s.packageNumber,
  s.Size,
  s.TestPackageOrder
}).Distinct().ToList().Select(m=> new ..) // continue your normal selection