有两个表格,学校和学期。学校记录必须显示,但记录的词语可能尚不存在,因此,该词可能为空(即左连接)。如果存在,则必须按照当前术语的日期过滤左连接表。这可以在LINQ中完成吗?将此SQL与左连接转换为LINQ
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:
一些输入后,我有一个左连接,但如果一所学校缺少一个学期,我仍然不能使开始和结束日期显示为空 - 学校不显示在所有如果我错过了一个学期,我想让学校在第一栏中展示。我在想什么?这是最新的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();
更新#2
下面是SQL结果的屏幕截图,我想实现在LINQ同样的事情:
https://code.msdn.microsoft.com/LINQ-Join-Operators-dabef4e9#leftouterjoin –