Priya-Kiko Ответов: 1

Как написать LINQ для сущностей для объединения пустых таблиц


Привет,

У меня есть два стола :

Category(categ) 
Sub Category (scat)

Я хочу выполнить следующий запрос к приведенным выше таблицам.
select a.code, a.name, a.type, b.category as category from categ a left join scat b on a.code=b.code


Вышеприведенный sql при выполнении на SQL Server это и есть результат.

code     name      type    category
1001     abc       F       NULL
1002     def       F       NULL
1003     ghi       B       NULL  


Я попробовал этот LINQ для приведенного выше запроса :
Обратите внимание : контекстная таблица scats-это пустая таблица.

List<categscat> lstcateg = (from categrow in Context.categs.AsEnumerable()
                            join scatrow in Context.scats
                            on categrow.code equals scatrow.code                             
                            select new categscat(categrow.code, categrow.name, 
                            categrow.type, categrow.cate, 
                            joinedrow.category)).ToList();



Это возвращает исключение NullReferenceException.

Что я уже пробовал:

попробовал использовать DefaultIfEmpty() в соответствии с предложениями по ссылке ниже :

https://www.codeproject.com/articles/169590/linq-to-sql-left-join-with-null-values

lstcateg = (from categrow in dlsmain.odlsContext.categs.AsEnumerable()
                            join scatrow in dlsmain.odlsContext.scats.AsEnumerable()
                            on categrow.code equals scatrow.code into jointable
                            from joinedrow in jointable.DefaultIfEmpty()
                            select new categscat(categrow.code, categrow.name, categrow.type, categrow.cate, joinedrow.category)).ToList();


И все же я получаю ту же ошибку. В чем же моя ошибка? Как сделать это правильно ? Пожалуйста, предложите.

1 Ответов

Рейтинг:
6

Priya-Kiko

Пересмотрел запрос, чтобы включить нулевую проверку, и все было в порядке.

Упоминается : 101 LINQ Samples in C#[^]

Пересмотренный запрос LINQ с выделенным изменением :

lstcateg = (from categrow in dlsmain.odlsContext.categs.AsEnumerable()
                           join scatrow in dlsmain.odlsContext.scats.AsEnumerable()
                           on categrow.code equals scatrow.code into jointable
                           from joinedrow in jointable.DefaultIfEmpty()
                           select new categscat(categrow.code, categrow.name, categrow.type, categrow.cate, joinedrow == null ? "" : joinedrow.category)).ToList();


Maciej Los

Стоит 5!

Priya-Kiko

Спасибо :)