可以在没有数据集的实体框架中进行左连接
本文关键字:框架 连接 实体 数据集 | 更新日期: 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个表TestPackages
、TestPackageReportDetails
和TestPackageReports
之间建立了连接。当我在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