วิธีการดำเนินการรวมภายนอกด้านซ้าย – LINQ ใน C#

Withi Kar Danein Kar Rwm Phaynxk Dan Say Linq Ni C



เมื่อต้องการแสดงบันทึกที่ตรงกันจากตารางด้านซ้ายและตารางด้านขวาใน SQL การรวมภายนอกด้านซ้ายเป็นการดำเนินการรวมชนิดหนึ่งที่ใช้ ใน LINQ การรวมภายนอกด้านซ้ายสามารถทำได้โดยใช้เมธอด GroupJoin() และ SelectMany() บทความนี้จะกล่าวถึงการดำเนินการรวมภายนอกด้านซ้ายใน LINQ โดยใช้ C# อย่างกว้างขวาง

วิธีการทำการรวมภายนอกด้านซ้ายใน LINQ โดยใช้ C #

หากต้องการทำการรวมภายนอกด้านซ้ายใน LINQ คุณสามารถใช้เมธอด GroupJoin() เพื่อรวมสองลำดับตามคีย์ทั่วไป จากนั้นใช้เมธอด SelectMany() เพื่อแบนผลลัพธ์ นี่คือตัวอย่าง:







ใช้ระบบ;
ใช้ System.Linq;

โปรแกรมคลาส
{
โมฆะคงที่หลัก ( )
{
var ซ้าย = ใหม่ [ ] { 1 , 2 , 3 } ;
var right = ใหม่ [ ] { 2 , 3 , 4 } ;
ผลลัพธ์ var = left.GroupJoin (
ขวา,
ล = > ลิตร
r = > อาร์
( ล. ร ) = > ใหม่ { ซ้าย = l, ขวา = r.DefaultIfEmpty ( ) } )
.เลือกหลายรายการ (
ล. = > lr.ขวา.Select (
r = > ใหม่ { ซ้าย = lr. ซ้าย, ขวา = r } ) ) ;
แต่ละ ( รายการ var ใน ผลลัพธ์ )
{
Console.WriteLine ( '{0} {1}' , รายการ. ซ้าย, รายการ. ขวา ) ;
}
}
}



รหัสนี้ดำเนินการรวมภายนอกซ้ายบนสองอาร์เรย์ซ้ายและขวา และพิมพ์ผลลัพธ์ไปยังคอนโซล วิธีการ GroupJoin() ดำเนินการเข้าร่วมและ เลือกหลายรายการ() ใช้วิธีทำให้ผลเรียบ สุดท้าย ผลลัพธ์จะถูกพิมพ์ไปยังคอนโซลโดยใช้ foreach loop และฟังก์ชัน WriteLine():







ต่อไปนี้เป็นอีกตัวอย่างหนึ่งที่สาธิตการใช้การรวมแบบชิดซ้ายโดยการแสดงชื่อพนักงานที่เกี่ยวข้องและแผนกที่เกี่ยวข้อง พนักงานแต่ละคนคือแต่ละแผนกได้รับการกำหนดหมายเลขที่จะใช้เพื่อจับคู่แผนกที่เกี่ยวข้องกับพนักงานที่เกี่ยวข้อง นี่คือรหัสที่สมบูรณ์สำหรับ:

ใช้ระบบ;
ใช้ System.Collections.Generic;
ใช้ System.Linq;

เนมสเปซ YourNamespace
{
โปรแกรมคลาส
{
โมฆะคงที่หลัก ( สตริง [ ] หาเรื่อง )
{
รายการ < ชื่อพนักงาน > พนักงาน = รายการใหม่ < ชื่อพนักงาน >
{
ชื่อพนักงานใหม่ { รหัส = 1 , ชื่อ = 'ตัวเขาเอง' , รหัสแผนก = 1 } ,
ชื่อพนักงานใหม่ { รหัส = 2 , ชื่อ = 'จอห์น' , รหัสแผนก = 2 } ,
ชื่อพนักงานใหม่ { รหัส = 3 , ชื่อ = 'เควิน' , รหัสแผนก = 2 } ,
ชื่อพนักงานใหม่ { รหัส = 4 , ชื่อ = 'บ๊อบ' , รหัสแผนก = 3 }
} ;

รายการ < แผนก > แผนก = รายการใหม่ < แผนก >
{
กรมใหม่ { รหัส = 1 , ชื่อ = “การเขียนเนื้อหา” } ,
กรมใหม่ { รหัส = 2 , ชื่อ = 'การตลาด' } ,
กรมใหม่ { รหัส = 3 , ชื่อ = 'วิศวกรรม' }
} ;

var แบบสอบถาม = จากชื่อพนักงาน ใน พนักงาน
เข้าร่วม แผนก ใน หน่วยงาน
ในชื่อพนักงาน.DepartmentId เท่ากับ department.Id เข้าสู่ departmentGroup
จากแผนก ใน departmentGroup.DefaultIfEmpty ( )
เลือก ใหม่ { ชื่อพนักงาน = ชื่อพนักงาน ชื่อแผนก ชื่อแผนก = ชื่อแผนก ?? 'ไม่มี' } ;

แต่ละ ( เป็นผล ใน สอบถาม )
{
Console.WriteLine ( $ 'ชื่อพนักงาน: {result.EmployeenameName} แผนก: {result.DepartmentName}' ) ;
}
}
}

ชื่อพนักงานชั้น
{
รหัส int สาธารณะ { รับ; ชุด ; }
ชื่อสตริงสาธารณะ { รับ; ชุด ; }
รหัสแผนก int สาธารณะ { รับ; ชุด ; }
}

แผนกวิชา
{
รหัส int สาธารณะ { รับ; ชุด ; }
ชื่อสตริงสาธารณะ { รับ; ชุด ; }
}
}



ขั้นแรกจะมีการให้ข้อมูลตัวอย่างที่มีชื่อพนักงานและชื่อแผนก และหลังจากนั้นจะมีการให้หมายเลขตามลำดับ ถัดไปการดำเนินการเข้าร่วมจะดำเนินการโดยใช้คำสั่ง join และหลังจากนั้นผลลัพธ์จะถูกบันทึกในตัวแปรชื่อเคียวรี ถัดไป for loop ใช้เพื่อพิมพ์ชื่อและแผนกของพนักงานที่เกี่ยวข้อง และผลลัพธ์ของโค้ดจะเป็นดังนี้ :

บทสรุป

การรวมภายนอกด้านซ้ายเป็นการดำเนินการทั่วไปใน SQL และยังสามารถดำเนินการได้อย่างง่ายดายโดยใช้ LINQ ใน C# การใช้เมธอด GroupJoin() และ SelectMany() คุณสามารถทำการรวมภายนอกด้านซ้ายในสองลำดับตามคีย์ทั่วไป แม้ว่าไวยากรณ์สำหรับการรวมภายนอกด้านซ้ายใน LINQ อาจเข้าใจยากสำหรับผู้เริ่มต้น แต่เป็นภาษาที่มีประสิทธิภาพและยืดหยุ่นซึ่งช่วยให้สามารถดำเนินการค้นหาที่ซับซ้อนได้อย่างง่ายดาย