我试图使用Linq语法重新创建以下sql查询,由于某种原因它无法正常工作,请告诉我这里我做错了什么
select
cf.VisitConfigId,
cf.VisitName,
sv.VisitDate
from SubjectVisitConfig cf
left join SubjectVisit sv on cf.VisitConfigId = sv.VisitConfigId
var q = from cf in ctms.SubjectVisitConfigs
join sv in ctms.SubjectVisits on cf.VisitConfigId equals
sv.VisitConfigId into JoinedVisits
from sv in JoinedVisits.DefaultIfEmpty()
where sv.SubjectId == subjectId.Value && sv.SiteId == siteId.Value
select new
{
sv.VisitId,
VisitDate = sv.VisitDate != null ? sv.VisitDate : null,
cf.VisitName
};
感谢您的帮助!
答案 0 :(得分:3)
您在select子句中无条件取消引用sv
- 但对于没有匹配sv
的项,SubjectVisit
将在逻辑上为空。您希望where
子句匹配sv
为空的任何结果?
这是一个可能的重写:
var q = from cf in ctms.SubjectVisitConfigs
join sv in ctms.SubjectVisits
.Where(x => x.SubjectId == subjectId.Value &&
x.SiteId == siteId.Value)
on cf.VisitConfigId equals sv.VisitConfigId into JoinedVisits
from sv in JoinedVisits.DefaultIfEmpty()
select new
{
VisitId = sv == null ? null : sv.VisitId,
VisitDate = sv == null ? null : sv.VisitDate,
cf.VisitName
};