2
私は、単一のLINQの式にこれをダウントレースしてきました..私は継承されたウェブアプリでいくつかの既存のコードでクラッシュを追跡しようとしている:エラーは、シーケンスに要素が含まれていない」であるアイテムが見つからない場合、LINQ式はLEFT JOINを使用できますか?
var projInfo = (from v in context.TPM_PROJECTVERSION
join p in context.TPM_PROJECT on v.PROJECTID equals p.PROJECTID
join pto in context.TPM_USER on v.TPM_USER1.USERID equals pto.USERID
join pt in context.TPM_PROJECTTYPES on p.PROJECTTYPEID equals pt.PROJECTTYPEID
where v.PROJECTID == projectId && v.VERSIONID == versionId
select new
{
ProjectName = v.NAME,
ProjectType = pt.SHORTNAME,
ProjectDesc = v.DESCRIPTION,
BusinessLaunchData = p.BUSINESSLAUNCHDATE,
BusinessSponsor = (v.TPM_USER3.FIRSTNAME + " " + v.TPM_USER3.LASTNAME),
PrimaryTrainingOwner = (pto.FIRSTNAME + " " + pto.LASTNAME)
}).First();
"これは私がこの行にたどった:
join pto in context.TPM_USER on v.TPM_USER1.USERID equals pto.USERID
USER1がnullの場合、行は返されません。代わりに、私はPrimaryTrainingOwnerをnullまたは空白にする必要があります。基本的には、代わりにLEFT JOINを実行し、PrimaryTrainerOwnerを設定する際にこれをチェックする必要があります。このケースを処理するためにこのLINQ式を更新する方法はありますか?ありがとう!
これはまさに正しいことです。 'subpto'ではなく' pto'を再利用するという選択肢があります。これは、元の 'pto'値が範囲外であるためです。 – dahlbyk