Sådan udføres Left Outer Joins – LINQ i C#

Sadan Udfores Left Outer Joins Linq I C



For at vise matchende poster fra den venstre tabel og den højre tabel i SQL er den venstre ydre join en type joinoperation, der bruges. I LINQ kan den venstre ydre join udføres ved hjælp af GroupJoin() og SelectMany() metoderne, denne artikel vil udførligt diskutere udførelse af venstre ydre joinforbindelse i LINQ ved hjælp af C#.

Sådan udføres Left Outer Joins i LINQ ved hjælp af C#

For at udføre en venstre ydre joinforbindelse i LINQ kan du bruge GroupJoin()-metoden til at forbinde to sekvenser baseret på en fælles nøgle og derefter bruge SelectMany()-metoden til at udjævne resultatet, her er et eksempel:







bruger System;
ved hjælp af System.Linq;

klasses program
{
statisk tomrum Main ( )
{
var venstre = ny [ ] { 1 , 2 , 3 } ;
var højre = ny [ ] { 2 , 3 , 4 } ;
var resultat = left.GroupJoin (
højre,
l = > l,
r = > r,
( l, r ) = > ny { Venstre = l, Højre = r.DefaultIfEmpty ( ) } )
.Vælg Mange (
lr = > lr.Højre.Vælg (
r = > ny { Venstre = lr. Venstre, Højre = r } ) ) ;
for hver ( var vare i resultat )
{
Console.WriteLine ( '{0} {1}' , vare.Venstre, vare.Højre ) ;
}
}
}



Denne kode udfører en venstre ydre joinforbindelse på to arrays til venstre og højre og udskriver resultatet til konsollen. GroupJoin()-metoden udfører joinforbindelsen, og VælgMange() metode bruges til at udjævne resultatet. Til sidst udskrives resultatet til konsollen ved hjælp af en foreach loop og WriteLine() funktion:







Her er et andet eksempel, der viser brugen af ​​at udføre udeladte joinforbindelser ved at vise respektive medarbejdernavne og deres relevante afdelinger. Hver medarbejder er hver afdeling har fået tildelt et nummer, som derefter bruges til at matche den relevante afdeling med den respektive medarbejder, her er den komplette kode for det:

bruger System;
ved hjælp af System.Collections.Generic;
ved hjælp af System.Linq;

navneområde Dit navneområde
{
klasses program
{
statisk tomrum Main ( snor [ ] args )
{
Liste < Ansattes navn > medarbejdere = ny Liste < Ansattes navn >
{
nyt medarbejdernavn { Id = 1 , Navn = 'Ham selv' , DepartmentId = 1 } ,
nyt medarbejdernavn { Id = 2 , Navn = 'John' , DepartmentId = 2 } ,
nyt medarbejdernavn { Id = 3 , Navn = 'Kevin' , DepartmentId = 2 } ,
nyt medarbejdernavn { Id = 4 , Navn = 'Bob' , DepartmentId = 3 }
} ;

Liste < Afdeling > afdelinger = ny Liste < Afdeling >
{
ny afdeling { Id = 1 , Navn = 'Indholdsskrivning' } ,
ny afdeling { Id = 2 , Navn = 'Markedsføring' } ,
ny afdeling { Id = 3 , Navn = 'Ingeniørarbejde' }
} ;

var query = fra medarbejdernavn i medarbejdere
tilslutte afdeling i afdelinger
på medarbejdernavn.Afdelings-Id svarer til afdeling.Id i afdelingsgruppe
fra afdelingen i afdelingGroup.DefaultIfEmpty ( )
Vælg ny { Medarbejdernavn = medarbejdernavn.Navn, Afdelingsnavn = afdeling?.Navn ?? 'Ingen' } ;

for hver ( blev resultatet i forespørgsel )
{
Console.WriteLine ( $ 'Medarbejdernavn: {result.EmployeenameName}, afdeling: {result.DepartmentName}' ) ;
}
}
}

klasse Medarbejdernavn
{
offentlig int Id { få; sæt ; }
offentlig streng Navn { få; sæt ; }
offentlig int DepartmentId { få; sæt ; }
}

klasse afdeling
{
offentlig int Id { få; sæt ; }
offentlig streng Navn { få; sæt ; }
}
}



Først gives et eksempeldata, der indeholder medarbejdernavn og navn på afdelinger, og derefter gives et respektive nummer til hver. Dernæst udføres join-operationen ved at bruge join-kommandoen og derefter gemmes resultatet i en variabel med navnet forespørgsel, dernæst bruges for-løkken til at udskrive de respektive medarbejderes navne og afdelinger, og outputtet af koden vil være som dette :

Konklusion

Venstre ydre joinforbindelse er en almindelig operation i SQL, og kan også udføres nemt ved hjælp af LINQ i C#. Ved at bruge metoderne GroupJoin() og SelectMany() kan du udføre venstre ydre joinforbindelser på to sekvenser baseret på en fælles nøgle. Selvom syntaksen til at udføre venstre ydre joinforbindelser i LINQ kan være svær at forstå for begyndere, er det et kraftfuldt og fleksibelt sprog, der gør det nemt at udføre komplekse forespørgsler.