Присоединитесь к LINQ с DefaultifEmpty, все еще вызывающим Исключение нулевой ссылки - PullRequest
1 голос
/ 06 марта 2019

Действительно ли возможно вызвать Null Reference Exeption в операторе соединения, даже если он имеет код DefaultIfEmpty() ??

     var getWorkerList = (from a in workerList
                         join ps in db.ProjectStatus on a.StatusId equals ps.StatusId into hjps
                         from ps in hjps.DefaultIfEmpty()
                         join psc in db.StatusColor on ps.StatusCode equals psc.StatusCode into hjpsc
                         from psc in hjpsc.DefaultIfEmpty()
                         join lu in db.LOOKUPS on psc.StatusColorID equals lu.LOOKUPS_ID into hjlu
                         from lu in hjlu.DefaultIfEmpty()
                         select new WorkerModel()
                         {
                            FullName = a.FullName
                            ,Color = lu.LOOKUPS_Code                  
                         }).OrderBy(a => a.WorkerId).ToList();

Вот где я получаю NullReferenceExeption Ошибка:

join lu in db.LOOKUPS on psc.StatusColorID equals lu.LOOKUPS_ID into hjlu
                         from lu in hjlu.DefaultIfEmpty()

при добавлении этого оператора соединения я получаю ошибку. Пожалуйста, помогите :(

Ответы [ 2 ]

4 голосов
/ 06 марта 2019

.DefaultIfEmpty() возвращает последовательность с одним значением по умолчанию , если исходный источник пуст .

По-прежнему будет выдано исключение нулевой ссылки, , если исходный источник равен нулю .

1 голос
/ 06 марта 2019

вы используете 'left join' вместо 'join' by '.DefaultIfEmpty ()'

, поэтому вы должны исправить оператор выбора: замените 'Color = lu.LOOKUPS_Code' на это: 'Color =Лу == Ноль?"": lu.LOOKUPS_Code '.

также вы можете использовать другую перегрузку' .DefaultIfEmpty () ', чтобы установить замену вместо' null ', поэтому тогда оператор select не будет выбрасыватьисключение

...