Jak provést levé vnější spojení – LINQ v C#

Jak Provest Leve Vnejsi Spojeni Linq V C



Pro zobrazení odpovídajících záznamů z levé tabulky a pravé tabulky v SQL je levé vnější spojení typem operace spojení, která se používá. V LINQ lze levé vnější spojení provádět pomocí metod GroupJoin() a SelectMany(), tento článek bude obsáhle diskutovat o provádění levých vnějších spojení v LINQ pomocí C#.

Jak provést levé vnější spojení v LINQ pomocí C#

Chcete-li provést levé vnější spojení v LINQ, můžete použít metodu GroupJoin() ke spojení dvou sekvencí na základě společného klíče a poté použít metodu SelectMany() ke sloučení výsledku, zde je příklad:







pomocí systému;
pomocí System.Linq;

třídní program
{
statické prázdno Hlavní ( )
{
var vlevo = nový [ ] { 1 , 2 , 3 } ;
var vpravo = nový [ ] { 2 , 3 , 4 } ;
var výsledek = left.GroupJoin (
že jo,
l = > l,
r = > r,
( l, r ) = > Nový { Vlevo = l, Vpravo = r.DefaultIfEmpty ( ) } )
.Vyberte Mnoho (
lr = > lr.Right.Select (
r = > Nový { Vlevo = lr. Vlevo, Vpravo = r } ) ) ;
pro každého ( var položka v výsledek )
{
Console.WriteLine ( „{0} {1}“ , item.Left, item. Right ) ;
}
}
}



Tento kód provede levé vnější spojení dvou polí vlevo a vpravo a vytiskne výsledek do konzoly. Metoda GroupJoin() provede spojení a SelectMany() metoda se používá k vyrovnání výsledku. Nakonec se výsledek vytiskne do konzole pomocí smyčky foreach a funkce WriteLine():







Zde je další příklad, který demonstruje použití provádění vynechaných spojení zobrazením příslušných jmen zaměstnanců a jejich příslušných oddělení. Každému zaměstnanci je každému oddělení přiděleno číslo, které se pak používá k přiřazení příslušného oddělení k příslušnému zaměstnanci, zde je jeho úplný kód:

pomocí systému;
pomocí System.Collections.Generic;
pomocí System.Linq;

jmenný prostor Váš jmenný prostor
{
třídní program
{
statické prázdno Hlavní ( tětiva [ ] argumenty )
{
Seznam < Jméno zaměstnance > zaměstnanci = nový Seznam < Jméno zaměstnance >
{
nové jméno zaměstnance { Id = 1 , Jméno = 'Sám' , DepartmentId = 1 } ,
nové jméno zaměstnance { Id = 2 , Jméno = 'John' , DepartmentId = 2 } ,
nové jméno zaměstnance { Id = 3 , Jméno = 'Kevin' , DepartmentId = 2 } ,
nové jméno zaměstnance { Id = 4 , Jméno = 'Bob' , DepartmentId = 3 }
} ;

Seznam < oddělení > oddělení = nový Seznam < oddělení >
{
nové oddělení { Id = 1 , Jméno = 'Psaní obsahu' } ,
nové oddělení { Id = 2 , Jméno = 'Marketing' } ,
nové oddělení { Id = 3 , Jméno = 'Inženýrství' }
} ;

var dotaz = od zaměstnance v zaměstnanci
připojit oddělení v oddělení
on zaměstnanecname.DepartmentId se rovná department.Id do departmentGroup
z oddělení v departmentGroup.DefaultIfEmpty ( )
vybrat Nový { EmployeenameName = zaměstnanec.Name, DepartmentName = oddělení?.Name ?? 'Žádný' } ;

pro každého ( byl výsledek v dotaz )
{
Console.WriteLine ( $ 'Jméno zaměstnance: {result.EmployeenameName}, oddělení: {result.DepartmentName}' ) ;
}
}
}

třída Jméno zaměstnance
{
public int Id { dostat; soubor ; }
veřejný řetězec Jméno { dostat; soubor ; }
public int DepartmentId { dostat; soubor ; }
}

třída Oddělení
{
public int Id { dostat; soubor ; }
veřejný řetězec Jméno { dostat; soubor ; }
}
}



Nejprve je uveden vzorový údaj, který obsahuje jméno zaměstnance a název oddělení a poté je každému přiděleno příslušné číslo. Dále se operace join provede pomocí příkazu join a poté se výsledek uloží do proměnné s názvem dotaz, dále se pomocí cyklu for vytiskne jména a oddělení příslušných zaměstnanců a výstup kódu bude vypadat takto :

Závěr

Levé vnější spojení je běžná operace v SQL a lze ji také snadno provést pomocí LINQ v C#. Pomocí metod GroupJoin() a SelectMany() můžete provádět levá vnější spojení dvou sekvencí na základě společného klíče. Ačkoli syntaxe pro provádění levých vnějších spojení v LINQ může být pro začátečníky obtížně srozumitelná, je to výkonný a flexibilní jazyk, který umožňuje snadné provádění složitých dotazů.