WHERE IN / NOT IN (LINQ, Entity Framework) ในหัวข้อนี้เราจะมารู้วิธีการใช้ WHERE IN และ NOT IN บน LINQ to Entities ซึ่งโดยปกติแล้วคำสั่งนี้เราสามารถใช้ OR แทนได้ แต่จะไม่นิยมเพราะการทำงานจะช้ากกว่า IN และ IN ยังสามารถประยุกต์ใช้ได้กับชุดข้อความที่เป็น Array และยังสามารถเอาค่า Result จาก LINQ ชุดที่ 1 ไปใช้ในยัง LINQ ชุดอื่น ๆ ได้อีกด้วย โดย Syntax ของ LINQ ที่เราใช้จะใช้ Contains
Example 1 : การใช้ Where In ด้วยค่าที่มาจาก Array
Code (C#)
private void frmMain_Load(object sender, EventArgs e)
{
// Create new entities Object
using (var db = new myDatabaseEntities())
{
// Array Country Code
string[] arrCountryCode = new string[] { "TH","US" };
// Get data from CUSTOMER
var ds = (from c in db.CUSTOMER
where arrCountryCode.Contains(c.COUNTRY_CODE)
select c).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()
' Array Country Code
Dim arrCountryCode As String() = New String() {"TH", "US"}
' Get data from CUSTOMER
Dim ds = (From c In db.CUSTOMER Where arrCountryCode.Contains(c.COUNTRY_CODE)
Select c).ToList()
' if found item rows
If ds.Count() > 0 Then
Me.myDataGridView.DataSource = ds
End If
End Using
End Sub
Screenshot
Example 2 : การ Where In ของ Result จาก LINQ ที่หนึ่งไป LINQ ที่สอง
Code (C#)
private void frmMain_Load(object sender, EventArgs e)
{
// Create new entities Object
using (var db = new myDatabaseEntities())
{
// Get COUNTRY
var country = (from c in db.COUNTRY
where c.COUNTRY_CODE == "US" || c.COUNTRY_CODE == "TH"
select c.COUNTRY_CODE).Distinct();
// Get data from CUSTOMER
var customer = (from c in db.CUSTOMER
where country.Contains(c.COUNTRY_CODE)
select c).ToList();
// if found item rows
if (customer.Count() > 0)
{
this.myDataGridView.DataSource = customer;
}
}
}
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 COUNTRY
Dim country = (From c In db.COUNTRY
Where c.COUNTRY_CODE = "US" Or c.COUNTRY_CODE = "TH"
Select c.COUNTRY_CODE).Distinct()
' Get data from CUSTOMER
Dim customer = (From c In db.CUSTOMER
Where country.Contains(c.COUNTRY_CODE)
Select c).ToList()
' if found item rows
If customer.Count() > 0 Then
Me.myDataGridView.DataSource = customer
End If
End Using
End Sub