MSDNの記事「方法:左外部結合の実行(C#プログラミングガイド)」にある手法を使用して、Linqコードで左外部結合を作成しようとしました。この記事ではDefaultIfEmpty
、グループ結合から左外部結合を作成するためのメソッドの使用について説明しています。基本的には、右側のコレクションに結果がない場合でも、左側(最初)のコレクションの結果を含めるようにプログラムに指示します。
ただし、このプログラムの実行方法は、外部結合が指定されていないかのように実行されます。
私たちのデータベースにAgentProductTraining
は、エージェントが受講したコースのコレクションがあります。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
};