Hvordan utføre venstre ytre sammenføyninger – LINQ i C#

Hvordan Utfore Venstre Ytre Sammenfoyninger Linq I C



For å vise samsvarende poster fra venstre tabell og høyre tabell i SQL, er venstre ytre sammenføyning en type sammenføyningsoperasjon som brukes. I LINQ kan den venstre ytre sammenføyningen utføres ved å bruke metodene GroupJoin() og SelectMany(), denne artikkelen vil i stor grad diskutere utførelse av ytre venstre sammenføyninger i LINQ ved bruk av C#.

Hvordan utføre venstre ytre sammenføyninger i LINQ ved hjelp av C#

For å utføre en venstre ytre sammenføyning i LINQ, kan du bruke GroupJoin()-metoden for å slå sammen to sekvenser basert på en felles nøkkel og deretter bruke SelectMany()-metoden for å flate ut resultatet, her er et eksempel:







bruker System;
bruker System.Linq;

klasseprogram
{
statisk tomrom Main ( )
{
var venstre = ny [ ] { 1 , 2 , 3 } ;
var høyre = ny [ ] { 2 , 3 , 4 } ;
var resultat = left.GroupJoin (
Ikke sant,
l = > jeg,
r = > r,
( l, r ) = > ny { Venstre = l, Høyre = r.DefaultIfEmpty ( ) } )
.Velg Mange (
lr = > lr.Høyre.Velg (
r = > ny { Venstre = lr. Venstre, Høyre = r } ) ) ;
for hver ( var element i resultat )
{
Console.WriteLine ( '{0} {1}' , element.Venstre, element.Høyre ) ;
}
}
}



Denne koden utfører en venstre ytre sammenføyning på to arrays til venstre og høyre, og skriver ut resultatet til konsollen. GroupJoin()-metoden utfører sammenføyningen, og SelectMany() metoden brukes for å flate ut resultatet. Til slutt skrives resultatet ut til konsollen ved å bruke en foreach loop og WriteLine() funksjon:







Her er et annet eksempel som viser bruken av å utføre utelatte sammenføyninger ved å vise respektive ansattes navn og deres relevante avdelinger. Hver ansatt er hver avdeling har blitt tildelt et nummer som deretter brukes til å matche den aktuelle avdelingen med den respektive ansatte, her er den komplette koden for det:

bruker System;
bruker System.Collections.Generic;
bruker System.Linq;

navneområdet ditt navneområde
{
klasseprogram
{
statisk tomrom Main ( streng [ ] args )
{
Liste < Ansattes navn > ansatte = ny Liste < Ansattes navn >
{
nytt medarbeidernavn { Id = 1 , Navn = 'Han selv' , Avdelings-ID = 1 } ,
nytt medarbeidernavn { Id = 2 , Navn = 'John' , Avdelings-ID = 2 } ,
nytt medarbeidernavn { Id = 3 , Navn = 'Kevin' , Avdelings-ID = 2 } ,
nytt medarbeidernavn { Id = 4 , Navn = 'Bob' , Avdelings-ID = 3 }
} ;

Liste < Avdeling > avdelinger = ny Liste < Avdeling >
{
ny avdeling { Id = 1 , Navn = 'Innholdsskriving' } ,
ny avdeling { Id = 2 , Navn = 'Markedsføring' } ,
ny avdeling { Id = 3 , Navn = 'Engineering' }
} ;

var query = fra ansattnavn i ansatte
bli med avdeling i avdelinger
på ansattnavn.DepartmentId tilsvarer avdeling.Id inn i avdelingGroup
fra avdelingen i departmentGroup.DefaultIfEmpty ( )
plukke ut ny { EmployeenameName = ansattnavn.Navn, Avdelingsnavn = avdeling?.Navn ?? 'Ingen' } ;

for hver ( ble resultatet i spørsmål )
{
Console.WriteLine ( $ 'Ansattnavn: {result.EmployeenameName}, avdeling: {result.DepartmentName}' ) ;
}
}
}

klasse Ansattnavn
{
offentlig int ID { få; sett ; }
offentlig streng Navn { få; sett ; }
offentlig int DepartmentId { få; sett ; }
}

klasse Avdeling
{
offentlig int ID { få; sett ; }
offentlig streng Navn { få; sett ; }
}
}



Først gis et eksempeldata som inneholder medarbeidernavn og navn på avdelinger, og deretter gis et respektive nummer til hver. Deretter utføres join-operasjonen ved å bruke join-kommandoen og deretter lagres resultatet i en variabel kalt spørring, deretter brukes for-løkken til å skrive ut navn og avdelinger til de respektive ansatte og utdataene til koden vil være slik :

Konklusjon

Left outer join er en vanlig operasjon i SQL, og kan også enkelt utføres ved å bruke LINQ i C#. Ved å bruke metodene GroupJoin() og SelectMany() kan du utføre venstre ytre sammenføyninger på to sekvenser basert på en felles nøkkel. Selv om syntaksen for å utføre venstre ytre sammenføyninger i LINQ kan være vanskelig å forstå for nybegynnere, er det et kraftig og fleksibelt språk som gjør det enkelt å utføre komplekse spørringer.