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

svselect 句で無条件に逆参照してsvいますが、一致しないアイテムの場合は論理的に null になりますSubjectVisitwheresvが nullである結果とどのように一致することを期待しますか?

考えられる書き換えの1 つを次に示します。

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 に答える