使用 MSDN 文章“如何:执行左外连接(C# 编程指南)”中的技术,我尝试在我的 Linq 代码中创建左外连接。文章提到使用该DefaultIfEmpty
方法从组连接创建左外连接。基本上,它指示程序包含左(第一个)集合的结果,即使右集合中没有结果。
然而,这个程序的执行方式,就好像没有指定外连接一样。
在我们的数据库中,AgentProductTraining
是我们的代理所学课程的集合。通常,如果不将相应的值输入到表中,您就无法将 a 输入Course
到相应的CourseMaterials
表中。但是,有时可能会发生这种情况,因此我们希望确保即使在 aCourse
中列出AgentProductTraining
而没有任何相应信息的情况下也能返回结果CourseMaterials
。
var training = from a in db.AgentProductTraining
join m in db.CourseMaterials on a.CourseCode equals m.CourseCode into apm
where
a.SymNumber == id
from m in apm.DefaultIfEmpty()
where m.EffectiveDate <= a.DateTaken
&& ((m.TerminationDate > a.DateTaken) | (m.TerminationDate == null))
select new
{
a.AgentProdTrainId,
a.CourseCode,
a.Course.CourseDescription,
a.Course.Partner,
a.DateTaken,
a.DateExpired,
a.LastChangeOperator,
a.LastChangeDate,
a.ProductCode,
a.Product.ProductDescription,
m.MaterialId,
m.Description,
a.Method
};