כיצד לבצע חיבורים חיצוניים שמאלה - LINQ ב-C#

Kyzd Lbz Hybwrym Hyzwnyym Sm Lh Linq B C



כדי להציג רשומות תואמות מהטבלה השמאלית והטבלה הימנית ב-SQL, החיבור השמאלי החיצוני הוא סוג של פעולת הצטרפות שבה נעשה שימוש. ב-LINQ, ניתן לבצע את החיבור החיצוני השמאלי באמצעות שיטות GroupJoin() ו- SelectMany(), מאמר זה ידון בהרחבה בביצוע חיבורים חיצוניים שמאליים ב-LINQ באמצעות C#.

כיצד לבצע Left Outer Joins ב-LINQ באמצעות C#

כדי לבצע צירוף חיצוני שמאלי ב-LINQ, אתה יכול להשתמש בשיטת GroupJoin() כדי לחבר שני רצפים המבוססים על מפתח משותף ולאחר מכן להשתמש בשיטת SelectMany() כדי לשטח את התוצאה, הנה דוגמה:







שימוש במערכת;
באמצעות System.Linq;

תוכנית הכיתה
{
ריק סטטי ראשי ( )
{
var left = חדש [ ] { 1 , 2 , 3 } ;
var right = חדש [ ] { 2 , 3 , 4 } ;
var result = left.GroupJoin (
ימין,
l = > אני,
r = > ר,
( ל, ר ) = > חָדָשׁ { שמאל = l, ימין = r.DefaultIfEmpty ( ) } )
.בחר רבים (
lr = > lr. Right.Select (
r = > חָדָשׁ { שמאל = lr.Left, Right = r } ) ) ;
לכל אחד ( פריט var ב תוֹצָאָה )
{
Console.WriteLine ( '{0} {1}' , פריט.שמאל, פריט.ימין ) ;
}
}
}



קוד זה מבצע חיבור חיצוני שמאלי בשני מערכים ימין ושמאל, ומדפיס את התוצאה לקונסולה. שיטת GroupJoin() מבצעת את ה-join, וה- SelectMany() השיטה משמשת כדי לשטח את התוצאה. לבסוף, התוצאה מודפסת למסוף באמצעות לולאה foreach ופונקציית WriteLine():







הנה דוגמה נוספת שמדגימה את השימוש בביצוע הצטרפות שנשארו בחוץ על ידי הצגת שמות העובדים בהתאמה והמחלקות הרלוונטיות שלהם. כל עובד הוא שלכל מחלקה הוקצה מספר שמשמש לאחר מכן להתאים את המחלקה הרלוונטית לעובד המתאים, הנה הקוד המלא עבורו:

שימוש במערכת;
באמצעות System.Collections.Generic;
באמצעות System.Linq;

מרחב השמות YourNamespace
{
תוכנית הכיתה
{
ריק סטטי ראשי ( חוּט [ ] args )
{
רשימה < שם העובד > עובדים = רשימה חדשה < שם העובד >
{
שם עובד חדש { מזהה = 1 , שם = 'עַצמוֹ' , DepartmentId = 1 } ,
שם עובד חדש { מזהה = 2 , שם = 'ג'ון' , DepartmentId = 2 } ,
שם עובד חדש { מזהה = 3 , שם = 'קווין' , DepartmentId = 2 } ,
שם עובד חדש { מזהה = 4 , שם = 'בוב' , DepartmentId = 3 }
} ;

רשימה < מַחלָקָה > מחלקות = רשימה חדשה < מַחלָקָה >
{
מחלקה חדשה { מזהה = 1 , שם = 'כתיבת תוכן' } ,
מחלקה חדשה { מזהה = 2 , שם = 'שיווק' } ,
מחלקה חדשה { מזהה = 3 , שם = 'הַנדָסָה' }
} ;

var query = מאת עובד שם ב עובדים
לְהִצְטַרֵף מַחלָקָה ב מחלקות
על שם עובד.DepartmentId שווה למחלקה.Id לתוך departmentGroup
מהמחלקה ב departmentGroup.DefaultIfEmpty ( )
בחר חָדָשׁ { EmployeenameName = שם עובד.שם, שם מחלקה = מחלקה?.שם ?? 'אף אחד' } ;

לכל אחד ( הייתה התוצאה ב שאילתא )
{
Console.WriteLine ( $ 'שם עובד: {result.EmployeenameName}, מחלקה: {result.DepartmentName}' ) ;
}
}
}

כיתה שם עובד
{
זיהוי אינט. ציבורי { לקבל; מַעֲרֶכֶת ; }
שם מחרוזת ציבורית { לקבל; מַעֲרֶכֶת ; }
זיהוי מחלקה ציבורית { לקבל; מַעֲרֶכֶת ; }
}

מחלקת כיתה
{
זיהוי אינט. ציבורי { לקבל; מַעֲרֶכֶת ; }
שם מחרוזת ציבורית { לקבל; מַעֲרֶכֶת ; }
}
}



תחילה ניתן נתונים לדוגמה המכילים את שם העובד ושם המחלקות ולאחר מכן ניתן מספר בהתאמה לכל אחת. לאחר מכן פעולת ה-join מתבצעת באמצעות פקודת join ולאחר מכן נשמרת התוצאה במשתנה בשם query, לאחר מכן לולאת for משמשת להדפסת השמות והמחלקות של העובדים המתאימים והפלט של הקוד יהיה כך :

סיכום

Left outer join היא פעולה נפוצה ב-SQL, וניתן לבצעה בקלות גם באמצעות LINQ ב-C#. באמצעות שיטות GroupJoin() ו- SelectMany(), ניתן לבצע חיבורים חיצוניים שמאליים בשני רצפים המבוססים על מפתח משותף. למרות שהתחביר לביצוע חיבורים חיצוניים שמאלה ב-LINQ עשוי להיות קשה להבנה למתחילים, זוהי שפה חזקה וגמישה המאפשרת לבצע שאילתות מורכבות בקלות.