LINQ NullReferenceException для DefaultIfEmpty
Я ищу решение проблемы наличия DefaultIfEmpty()
метод extension не принимает нулевые значения при использовании во внешнем соединении LINQ.
Код следующим образом:
var SummaryLossesWithNets = (from g in SummaryLosses
join n in nets
on g.Year equals n.Year into grouping
from x in grouping.DefaultIfEmpty()
select new
{
Year = g.Year,
OEPGR = g.OccuranceLoss,
AEPGR = g.AggregateLoss,
OEPNET = ((x.OEPRecovery == null) ? 0 : x.OEPRecovery),
AEPNET = ((x.AEPRecovery == null) ? 0 : x.AEPRecovery),
});
В списке SummaryLosses есть данные за многие годы, которые я хотел бы присоединить к таблице 'nets', которая содержит часть лет. Исключение выдается для x, являющегося нулевым значением, я предполагаю, потому что годы в SummaryLosses, не совпадающие с годами в сетях, создают нулевые значения в списке группировки.
Как можно проверить здесь нулевое значение? Как вы можете видеть, я пытался проверить наличие нулевых значений в свойствах x, но, поскольку x равен null, это не работает.
С наилучшими пожеланиями Ричард
2 ответа
Просто проверьте, x
вместо этого имеет значение null:
OEPNET = x == null ? 0 : x.OEPRecovery,
AEPNET = x == null ? 0 : x.AEPRecovery
Или если x.OEPRecovery
а также x.AEPRecovery
Обнуляемые свойства тоже используйте:
OEPNET = x == null ? 0 : (x.OEPRecovery ?? 0),
AEPNET = x == null ? 0 : (x.AEPRecovery ?? 0)
Если у вас есть много заявлений присоединения
проверить проверить
all joined tables
и убедитесь, чтоforeign key you are using
(в сравнении или, скажем, заинтересованы)is not null