1

我正在尝试使用 Linq 语法重新创建以下 sql 查询,由于某种原因它不起作用,请让我知道我在这里做错了什么

我的sql查询:

select 
cf.VisitConfigId,
cf.VisitName,
sv.VisitDate 
from SubjectVisitConfig cf 
left join SubjectVisit sv on cf.VisitConfigId = sv.VisitConfigId

我的 Linq 查询:

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
        };

谢谢你的帮助!

4

1 回答 1

3

sv在 select 子句中无条件地取消引用 - 但sv对于没有匹配的项目,逻辑上将为 null 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
        };
于 2012-04-19T21:53:49.840 回答