Left Join (LINQ, Entity Framework) |
Left Join (LINQ, Entity Framework) ในการ Join ข้อมูลในรูปแบบปกติ Table ทั้ง 2 ที่จะ Join เข้าหากันนั้นจะต้องมีข้อมูลทั้ง 2 ฝั่งถึงจะแสดงข้อมูลนั้นออกมา แต่ในกรณีที่ใช้ Left Join นั่นหมายถึงว่าให้คำนึงถึงข้อมูลของ Table ทางด้านซ้ายเป็นหลัก ส่วน Table ที่มา Join อีกตารางนั้นจะไม่มีหรือมีข้อมูลก็ได้ ซึ่งจะแสดงรายการเป็นค่าว่างในกรณีที่ไม่มีข้อมูล
Table สมมุติกรณีที่มีข้อมูล เฉพาะใน Table ด้านซ้าย และด้านขวา ตัวที่ Join จะไม่มีข้อมูล
Left Join Syntax (C#)
var ds = (from c in db.TABLE1
join d in db.TABLE2 on c.COL equals d.COL into d2
from f in d2.DefaultIfEmpty()
select c).ToList();
Left Join Syntax (VB.Net)
Dim ds = (From c In db.TABLE1
Group Join d In db.TABLE2 On c.COL Equals d.COL Into Group
From f In Group.DefaultIfEmpty()
Select c).ToList()
Example 1 : การ Join ข้อมูลด้วยรูปแบบปกติ
Code (C#)
private void frmMain_Load(object sender, EventArgs e)
{
// Create new entities Object
using (var db = new myDatabaseEntities())
{
// Get data from CUSTOMER
var ds = (from c in db.CUSTOMER
join d in db.COUNTRY on c.COUNTRY_CODE equals d.COUNTRY_CODE
select new
{
CusID = c.CUSTOMER_ID,
CusName = c.NAME,
CountryName = d.COUNTRY_NAME
}).ToList();
// if found item rows
if (ds.Count() > 0)
{
this.myDataGridView.DataSource = ds;
}
}
}
Code (VB.Net)
Private Sub frmMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' Create new entities Object
Using db = New myDatabaseEntities()
' Get data from CUSTOMER
Dim ds = (From c In db.CUSTOMER
Join d In db.COUNTRY On c.COUNTRY_CODE Equals d.COUNTRY_CODE
Select New With { _
.CusID = c.CUSTOMER_ID, _
.CusName = c.NAME, _
.CountryName = d.COUNTRY_NAME _
}).ToList()
' if found item rows
If ds.Count() > 0 Then
Me.myDataGridView.DataSource = ds
End If
End Using
End Sub
Screenshot
จากตัวอย่างที่ 1 จะเห็นว่าข้อมูลหายไป 1 รายการ ฉะนั้นการใช้ Left Join ที่ถูกต้องต้องใช้เหมือนกับตัวอย่างที่ 2
Example 2 : การ Left Join ข้อมูล โดยคำนึงถึงข้อมูลทางด้านซ้ายเป็นหลัก
Code (C#)
private void frmMain_Load(object sender, EventArgs e)
{
// Create new entities Object
using (var db = new myDatabaseEntities())
{
// Get data from CUSTOMER
var ds = (from c in db.CUSTOMER
join d in db.COUNTRY on c.COUNTRY_CODE equals d.COUNTRY_CODE into d2
from f in d2.DefaultIfEmpty()
select new
{
CusID = c.CUSTOMER_ID,
CusName = c.NAME,
CountryName = (f.COUNTRY_NAME == null ? "-" : f.COUNTRY_NAME),
}).ToList();
// if found item rows
if (ds.Count() > 0)
{
this.myDataGridView.DataSource = ds;
}
}
}
Code (VB.Net)
Private Sub frmMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' Create new entities Object
Using db = New myDatabaseEntities()
' Get data from CUSTOMER
Dim ds = (From c In db.CUSTOMER
Group Join d In db.COUNTRY On c.COUNTRY_CODE Equals d.COUNTRY_CODE Into Group
From f In Group.DefaultIfEmpty() _
Select New With { _
.CusID = c.CUSTOMER_ID, _
.CusName = c.NAME, _
.CountryName = (If(f.COUNTRY_NAME Is Nothing, "-", f.COUNTRY_NAME)) _
}).ToList()
' if found item rows
If ds.Count() > 0 Then
Me.myDataGridView.DataSource = ds
End If
End Using
End Sub
Screenshot
|
ช่วยกันสนับสนุนรักษาเว็บไซต์ความรู้แห่งนี้ไว้ด้วยการสนับสนุน Source Code 2.0 ของทีมงานไทยครีเอท
|
|
|
By : |
ThaiCreate.Com Team (บทความเป็นลิขสิทธิ์ของเว็บไทยครีเอทห้ามนำเผยแพร่ ณ เว็บไซต์อื่น ๆ) |
|
Score Rating : |
|
|
|
Create/Update Date : |
2015-10-02 21:16:40 /
2017-03-24 23:07:26 |
|
Download : |
No files |
|
Sponsored Links / Related |
|
|
|
|
|