Πώς να εκτελέσετε αριστερές εξωτερικές συνδέσεις – LINQ σε C#

Pos Na Ektelesete Aristeres Exoterikes Syndeseis Linq Se C



Για να εμφανίσετε αντίστοιχες εγγραφές από τον αριστερό πίνακα και τον δεξιό πίνακα στην SQL, η αριστερή εξωτερική ένωση είναι ένας τύπος λειτουργίας σύνδεσης που χρησιμοποιείται. Στο LINQ, η αριστερή εξωτερική ένωση μπορεί να πραγματοποιηθεί χρησιμοποιώντας τις μεθόδους GroupJoin() και SelectMany().

Πώς να εκτελέσετε αριστερές εξωτερικές συνδέσεις στο LINQ χρησιμοποιώντας C#

Για να εκτελέσετε μια αριστερή εξωτερική ένωση στο LINQ, μπορείτε να χρησιμοποιήσετε τη μέθοδο GroupJoin() για να συνδέσετε δύο ακολουθίες που βασίζονται σε ένα κοινό κλειδί και στη συνέχεια να χρησιμοποιήσετε τη μέθοδο SelectMany() για να ισοπεδώσετε το αποτέλεσμα, εδώ είναι ένα παράδειγμα:







χρησιμοποιώντας το σύστημα.
χρησιμοποιώντας System.Linq;

Πρόγραμμα τάξης
{
στατικό κενό Κύριο ( )
{
var αριστερά = νέος [ ] { 1 , 2 , 3 } ;
var δεξιά = νέος [ ] { 2 , 3 , 4 } ;
var result = αριστερά.GroupJoin (
σωστά,
l = > μεγάλο,
r = > r,
( l, r ) = > νέος { Αριστερά = l, Δεξιά = r.DefaultIfEmpty ( ) } )
.Επιλέξτε Πολλά (
lr = > lr.Δεξιά.Επιλέξτε (
r = > νέος { Αριστερά = lr.Αριστερά, Δεξιά = r } ) ) ;
για κάθε ( var είδος σε αποτέλεσμα )
{
Κονσόλα.WriteLine ( '{0} {1}' , στοιχείο.Αριστερά, στοιχείο.Δεξιά ) ;
}
}
}



Αυτός ο κώδικας εκτελεί μια αριστερή εξωτερική ένωση σε δύο συστοιχίες αριστερά και δεξιά και εκτυπώνει το αποτέλεσμα στην κονσόλα. Η μέθοδος GroupJoin() εκτελεί την ένωση και το SelectMany() μέθοδος χρησιμοποιείται για να ισοπεδώσει το αποτέλεσμα. Τέλος, το αποτέλεσμα εκτυπώνεται στην κονσόλα χρησιμοποιώντας έναν βρόχο foreach και τη συνάρτηση WriteLine():







Ακολουθεί ένα άλλο παράδειγμα που δείχνει τη χρήση της εκτέλεσης παραλειπόμενων ενώσεων με την εμφάνιση των αντίστοιχων ονομάτων υπαλλήλων και των σχετικών τμημάτων τους. Κάθε υπάλληλος είναι σε κάθε τμήμα έχει εκχωρηθεί ένας αριθμός που στη συνέχεια χρησιμοποιούνται για να αντιστοιχίσουν το σχετικό τμήμα με τον αντίστοιχο υπάλληλο, εδώ είναι ο πλήρης κωδικός για αυτό:

χρησιμοποιώντας το σύστημα.
χρησιμοποιώντας System.Collections.Generic;
χρησιμοποιώντας System.Linq;

Χώρος ονομάτων YourNamespace
{
Πρόγραμμα τάξης
{
στατικό κενό Κύριο ( σειρά [ ] args )
{
Λίστα < Ονομα υπαλλήλου > υπάλληλοι = νέα Λίστα < Ονομα υπαλλήλου >
{
νέο όνομα υπαλλήλου { Id = 1 , Όνομα = 'Ο ίδιος' , Αναγνωριστικό τμήματος = 1 } ,
νέο όνομα υπαλλήλου { Id = 2 , Όνομα = 'Γιάννης' , Αναγνωριστικό τμήματος = 2 } ,
νέο όνομα υπαλλήλου { Id = 3 , Όνομα = 'Κέβιν' , Αναγνωριστικό τμήματος = 2 } ,
νέο όνομα υπαλλήλου { Id = 4 , Όνομα = 'Βαρίδι' , Αναγνωριστικό τμήματος = 3 }
} ;

Λίστα < Τμήμα > τμήματα = νέα Λίστα < Τμήμα >
{
νέο Τμήμα { Id = 1 , Όνομα = «Γράψιμο περιεχομένου» } ,
νέο Τμήμα { Id = 2 , Όνομα = 'Εμπορία' } ,
νέο Τμήμα { Id = 3 , Όνομα = 'Μηχανική' }
} ;

var query = από όνομα υπαλλήλου σε υπαλλήλους
Συμμετοχή τμήμα σε τμήματα
στο staffname.DepartmentId ισούται με το Department.Id στο DepartmentGroup
από το τμήμα σε DepartmentGroup.DefaultIfEmpty ( )
επιλέγω νέος { EmployeenameName = όνομα υπαλλήλου.Όνομα, ΤμήμαΌνομα = τμήμα;.Όνομα ?? 'Κανένας' } ;

για κάθε ( ήταν το αποτέλεσμα σε ερώτηση )
{
Κονσόλα.WriteLine ( $ 'Employeename: {result.EmployeenameName}, Τμήμα: {result.DepartmentName}' ) ;
}
}
}

Όνομα υπαλλήλου τάξης
{
public int Id { παίρνω; σειρά ; }
δημόσια συμβολοσειρά Όνομα { παίρνω; σειρά ; }
δημόσιος int DepartmentId { παίρνω; σειρά ; }
}

Τμήμα τάξης
{
public int Id { παίρνω; σειρά ; }
δημόσια συμβολοσειρά Όνομα { παίρνω; σειρά ; }
}
}



Αρχικά δίνεται ένα δείγμα δεδομένων που περιέχει το όνομα υπαλλήλου και το όνομα των τμημάτων και στη συνέχεια δίνεται ένας αντίστοιχος αριθμός σε καθένα. Στη συνέχεια, η λειτουργία ένωσης εκτελείται χρησιμοποιώντας την εντολή join και μετά το αποτέλεσμα αποθηκεύεται σε μια μεταβλητή με το όνομα query, στη συνέχεια χρησιμοποιείται ο βρόχος for για την εκτύπωση των ονομάτων και των τμημάτων των αντίστοιχων υπαλλήλων και η έξοδος του κώδικα θα είναι έτσι :

συμπέρασμα

Η αριστερή εξωτερική σύνδεση είναι μια κοινή λειτουργία στην SQL και μπορεί επίσης να εκτελεστεί εύκολα χρησιμοποιώντας το LINQ σε C#. Χρησιμοποιώντας τις μεθόδους GroupJoin() και SelectMany(), μπορείτε να εκτελέσετε αριστερές εξωτερικές συνδέσεις σε δύο ακολουθίες που βασίζονται σε ένα κοινό κλειδί. Αν και η σύνταξη για την εκτέλεση αριστερών εξωτερικών συνδέσεων στο LINQ μπορεί να είναι δύσκολο να κατανοηθεί από αρχάριους, είναι μια ισχυρή και ευέλικτη γλώσσα που επιτρέπει την εύκολη εκτέλεση σύνθετων ερωτημάτων.