我有这个疑问可以使左实体框架中加入无数据集
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之间进行左连接吗?如果是,我该怎么做?
EF是一个ORM,而不是SQL的替代品你的*实体*应该有关系,以便你*不需要使用连接。这意味着你的'TestPackage'类应该有'Reports'集合'TestPackageReport'应该有'Details'集合。你可能只需要加载适当的包。其余的将被懒惰地装载。或者你可以添加一对'Include()'调用来加载它们 –
最后一次连接中的选择器不应该是另一种方式吗?其次,为什么不使用Query-Syntax(_ctx.TestPackages ....中的s)使代码清晰易读? – user3185569
换句话说,你应该能够编写'_ctx.TestPackages.Where(s => s.Id == TestPackageId);'或'_ctx.TestPackages.Include(“TestPackageReport”).include(“TestPackageReport.TestPackageReportDetail”) 。 Where(s => s.Id == TestPackageId);' –