У меня есть запрос LINQ, который вызывает исключение InvalidOperationException во время выполнения при вызове ToList(), и я пытаюсь найти способ обойти его, если это возможно, без необходимости разбивать соединение в отдельные пункты.InvalidOperationException при присоединении к составному ключу
Указанные линии представляют собой 3 и 4 в приведенном ниже примере. loan_id не является нулевым типом десятичного числа, ti_disb_id не является нулевым типом. Когда я разделяю их на отдельные утверждения, нет исключения при вызове 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 Исключение было необработанное кодом пользователя
Актерский к типу значения 'Int16' не удалось, потому материализованная значение равно нулю. Либо общий параметр типа результата, либо запрос должны использовать тип с нулевым значением.
Большое спасибо!
Запустите запрос в базе данных, чтобы увидеть результат, а какие столбцы - null. Это должно дать вам подсказку о том, где находится нуль. –
@GarrisonNeely исключение уже предоставило всю эту информацию (предполагая, что она фактически выбрасывается из строки 3 или 4 этого запроса), она говорит об одном из 'ti_disb_id' значения равны нулю. – evanmcdonnal
@evanmcdonnal Это смешно, ни одно из значений на самом деле не равно нулю. Я просмотрел значения базы данных и даже использовал запрос, который должен быть сгенерирован _supposed_. Будь то _actually_ использует этот запрос, я еще не понял. –