ToList() を呼び出すときに実行時に InvalidOperationException をスローする LINQ クエリがあり、可能であれば、結合を個別の where 句に分割することなく、それを回避する方法を見つけようとしています。
問題の行は、次の例の 3 と 4 です。loan_id は null 非許容型の decimal であり、ti_disb_id は非 null 非許容型の short です。これらを個別のステートメントに分割すると、ToList() を呼び出すときに例外はありません。ただ、一緒にしたほうが理にかなっているようなので、解決策があればぜひ聞きたいです。:)
var baseQuery = (from a in context.ti_disbursements
join b in context.disbursement_schedule
on new {a.loan_id, a.ti_disb_id} equals
new {b.loan_id, b.ti_disb_id} into ab
from b in ab.DefaultIfEmpty()
join c in context.business_associates
on a.ba_id equals c.ba_id into ac
from c in ac.DefaultIfEmpty()
join d in context.investor_loan
on b.loan_id equals d.loan_id into ad
from d in ad.DefaultIfEmpty()
join e in context.loan_information
on d.loan_id equals e.loan_id into ae
from e in ae.DefaultIfEmpty()
join f in context.loan_balances
on e.loan_id equals f.loan_id into af
from f in af.DefaultIfEmpty()
join g in context.ti_information
on e.loan_id equals g.loan_id into ag
from g in ag.DefaultIfEmpty()
select new
{
loan_id = a.loan_id,
ti_disb_id = a.ti_disb_id,
ti_freq_id = a.ti_freq_id,
ti_disbursements_stop_code = a.ti_stop_code,
tax_account_number = a.tax_account_number,
ti_disb_due_dt = b.ti_disb_due_dt,
ti_expire_dt = b.ti_expire_dt,
ti_disb_amt = b.ti_disb_amt,
schedule_id = b.schedule_id,
ba_name = c.ba_name,
inv_bank_cd = d.inv_bank_cd,
inv_cd = d.inv_cd,
inv_group_cd = d.inv_group_cd,
loan_name = e.loan_name,
prin_bal = f.prin_bal,
ti_bal = f.ti_bal,
ti_information_stop_code = g.ti_stop_cd,
non_escrowed_type = a.non_escrowed_type,
ba_type_id = a.ba_type_id,
bill_received_dt = a.bill_received_dt,
});
例外メッセージ:
InvalidOperation 例外がユーザー コードによって処理されませんでした
具体化された値が null であるため、値型 'Int16' へのキャストが失敗しました。結果の型のジェネリック パラメーターまたはクエリのいずれかで、null 許容型を使用する必要があります。
よろしくお願いします!