学校と用語の2つのテーブルがあります。学校記録が表示されなければなりませんが、記録という用語はまだ存在しない可能性があります。そのため、この用語はnullになる可能性があります(したがって、左結合)。左側の結合テーブルは、現在の用語が存在する場合は日付でフィルタリングする必要があります。これはLINQで行うことができますか?LINQへの左結合によるこのSQLの変換
select school.school_name, term.term_start, term.term_end
from school
left join term on school.school_id = term.school_id and term.term_start <= '2017-10-21' and term.term_end >= '2017-10-21'
where school.active = 1
order by school.school_name
UPDATE:
いくつか入力した後、私は左を持って参加したが、学校が、私はまだ開始日と終了日がnullとして表示させることができない期間が欠落している場合 - 学校はまったく表示されません。私が言葉を紛失している場合は、最初の欄に学校を表示します。私は何が欠けているのですか?ここに最新のLinqPadコードがあります。ここで
var query = ((from sc in Schools.Where(s => s.Active == 1)
join t in Terms on sc.School_id equals t.School_id into ts
from tsub in ts.DefaultIfEmpty()
select new {name = sc.School_name,
start = tsub.Term_start,
end = tsub.Term_end})
.Where (o => o.start <= DateTime.Now && o.end >= DateTime.Now))
.OrderBy(o => o.name);
query.Dump();
UPDATE#2
SQL結果のスクリーンショットである、と私はLINQで同じことを達成しようとしています:
https://code.msdn.microsoft.com/LINQ-Join-Operators-dabef4e9#leftouterjoin –