Как выполнять левые внешние соединения — LINQ в C#

Kak Vypolnat Levye Vnesnie Soedinenia Linq V C



Для отображения совпадающих записей из левой и правой таблиц в SQL используется левое внешнее соединение — тип операции соединения. В LINQ левое внешнее соединение можно выполнить с помощью методов GroupJoin() и SelectMany(). В этой статье подробно обсуждается выполнение левого внешнего соединения в LINQ с использованием C#.

Как выполнить левое внешнее соединение в LINQ с помощью C#

Чтобы выполнить левое внешнее соединение в LINQ, вы можете использовать метод GroupJoin() для объединения двух последовательностей на основе общего ключа, а затем использовать метод SelectMany() для выравнивания результата, вот пример:







с помощью системы;
с помощью System.Linq;

программа класса
{
статическая пустота Главная ( )
{
переменная слева = новый [ ] { 1 , 2 , 3 } ;
переменная справа = новый [ ] { 2 , 3 , 4 } ;
результат var = left.GroupJoin (
верно,
л = > л,
р = > р,
( л, р ) '=' > новый { Слева = l, справа = r.DefaultIfEmpty ( ) } )
.SelectMany (
л = > л.Право.Выбрать (
р = > новый { Слева = lr. Слева, справа = r } ) ) ;
для каждого ( переменный элемент в результат )
{
Console.WriteLine ( '{0} {1}' , элемент.Слева, элемент.Право ) ;
}
}
}



Этот код выполняет левое внешнее соединение двух массивов слева и справа и выводит результат на консоль. Метод GroupJoin() выполняет соединение, а ВыбратьМного() Метод используется для выравнивания результата. Наконец, результат выводится на консоль с помощью цикла foreach и функции WriteLine():







Вот еще один пример, демонстрирующий использование исключенных соединений путем отображения имен соответствующих сотрудников и их соответствующих отделов. Каждому сотруднику — это каждый отдел, которому был присвоен номер, который затем используется для сопоставления соответствующего отдела с соответствующим сотрудником, вот полный код для него:

с помощью системы;
используя System.Collections.Generic;
с помощью System.Linq;

пространство имен YourNamespace
{
программа класса
{
статическая пустота Главная ( нить [ ] аргументы )
{
Список < Имя сотрудника > сотрудники = новый список < Имя сотрудника >
{
новое имя сотрудника { идентификатор = 1 , Имя = 'Сам' , идентификатор отдела = 1 } ,
новое имя сотрудника { идентификатор = 2 , Имя = 'Джон' , идентификатор отдела = 2 } ,
новое имя сотрудника { идентификатор = 3 , Имя = 'Кевин' , идентификатор отдела = 2 } ,
новое имя сотрудника { идентификатор = 4 , Имя = 'Боб' , идентификатор отдела = 3 }
} ;

Список < Отделение > отделы = новый список < Отделение >
{
новый отдел { идентификатор = 1 , Имя = «Написание контента» } ,
новый отдел { идентификатор = 2 , Имя = 'Маркетинг' } ,
новый отдел { идентификатор = 3 , Имя = 'Инжиниринг' }
} ;

var query = от имени сотрудника в сотрудники
присоединиться отделение в отделы
на имя_сотрудника.DepartmentId равняется «department.Id» в «departmentGroup»
из отдела в DepartmentGroup.DefaultIfEmpty ( )
выбирать новый { Имя_сотрудника = имя_сотрудника.Имя, Имя_отдела = отдел?.Имя ?? 'Никто' } ;

для каждого ( был результат в запрос )
{
Console.WriteLine ( $ 'Имя сотрудника: {result.EmployeenameName}, отдел: {result.DepartmentName}' ) ;
}
}
}

класс имя_сотрудника
{
общедоступный идентификатор { получать; набор ; }
общедоступная строка Имя { получать; набор ; }
общедоступный интервал { получать; набор ; }
}

классный отдел
{
общедоступный идентификатор { получать; набор ; }
общедоступная строка Имя { получать; набор ; }
}
}



Сначала дается образец данных, который содержит имя сотрудника и название отдела, а затем каждому присваивается соответствующий номер. Затем операция соединения выполняется с помощью команды соединения, после чего результат сохраняется в переменной с именем query, затем цикл for используется для печати имен и отделов соответствующих сотрудников, и вывод кода будет таким: :

Заключение

Левое внешнее соединение — это обычная операция в SQL, которую также можно легко выполнить с помощью LINQ в C#. Используя методы GroupJoin() и SelectMany(), вы можете выполнять левые внешние соединения двух последовательностей на основе общего ключа. Хотя синтаксис для выполнения левых внешних соединений в LINQ может быть труден для понимания новичками, это мощный и гибкий язык, позволяющий легко выполнять сложные запросы.