Thursday, May 21, 2015

Converting SQL to LINQ: Left/Right Outer Join VB.NET

1. Đinh nghĩa
Class Customer
    Public CustomerID As Integer?
    Public ContactName As String
    Public Phone As String
    Public Address As String
    Public City As String
    Public State As String
    Public Zip As String
End Class

Class Order
    Public OrderID As Integer?
    Public CustomerID As Integer?
    Public Cost As Single?
    Public Phone As String
    Public OrderDate As DateTime?
    Public ShippingZip As String
    Public ItemName As String
End Class
2. Chuyền kết quả


Dim CustomerTable As Customer() = { _
    New Customer With {.ContactName = "Bill Horst", .CustomerID = 112}, _
    New Customer With {.ContactName = "John Doe", .CustomerID = 354}, _
    New Customer With {.ContactName = "Jane Doe", .CustomerID = 938}}

Dim OrderTable As Order() = { _
    New Order With {.OrderDate = #3/25/1982#, .CustomerID = 112}, _
    New Order With {.OrderDate = #3/13/2005#, .CustomerID = 112}, _
    New Order With {.OrderDate = #9/29/2007#, .CustomerID = 938}, _
    New Order With {.OrderDate = #1/31/2008#, .CustomerID = 444}}
3. Kết quả join left
SQL
SELECT Contact.ContactName, Shipment.OrderDate
FROM CustomerTable Contact
LEFT OUTER JOIN OrderTable Shipment
   ON Contact.CustomerID = Shipment.CustomerID

Results:
ContactName     OrderDate
Bill Horst      3/25/1982
Bill Horst      3/13/2005
John Doe        NULL
Jane Doe        9/29/2007
LinkQ
VB
From Contact In CustomerTable _
Group Join Shipment In OrderTable _
  On Contact.CustomerID Equals Shipment.CustomerID _
  Into RightTableResults = Group

Results:
{Contact={Customer}, RightTableResults = {Grouping}}
{Contact={Customer}, RightTableResults = {Order[]}}
{Contact={Customer}, RightTableResults = {Grouping}}
VB
From Contact In CustomerTable _
Group Join Shipment In OrderTable _
  On Contact.CustomerID Equals Shipment.CustomerID _
  Into RightTableResults = Group _
From Shipment In RightTableResults.DefaultIfEmpty

Results:
{Contact = {Customer}, RightTableResults = {Grouping}, Shipment = {Order}}
{Contact = {Customer}, RightTableResults = {Grouping}, Shipment = {Order}}
{Contact = {Customer}, RightTableResults = {Order[]}, Shipment = Nothing}
{Contact = {Customer}, RightTableResults = {Grouping}, Shipment = {Order}}
VB
From Contact In CustomerTable _
Group Join Shipment In OrderTable _
  On Contact.CustomerID Equals Shipment.CustomerID _
  Into RightTableResults = Group _
From Shipment In RightTableResults.DefaultIfEmpty _
Select Contact.ContactName, _
       Shipment.OrderDate
VB
From Contact In CustomerTable _
Group Join Shipment In OrderTable _
  On Contact.CustomerID Equals Shipment.CustomerID _
  Into RightTableResults = Group _
From Shipment In RightTableResults.DefaultIfEmpty _
Select Contact.ContactName, _
       OrderDate = _
         If(Shipment Is NothingNothing, _
            If(Shipment Is NothingNew Order, Shipment).OrderDate)

Results:
{ContactName = "Bill Horst", OrderDate = {DateTime}}
{ContactName = "Bill Horst", OrderDate = {DateTime}}
{ContactName = "John Doe", OrderDate = Nothing}
{ContactName = "Jane Doe", OrderDate = {DateTime}}
VB
Dim RightJoin = _
    From Shipment In OrderTable _
    Group Join Contact In CustomerTable _
      On Contact.CustomerID Equals Shipment.CustomerID _
      Into RightTableResults = Group _
    From Contact In RightTableResults.DefaultIfEmpty _
    Select ContactName = _
             If(Contact Is Nothing, _
                Nothing, _
                If(Contact Is Nothing, _
                   New Customer, _
                   Contact).ContactName), _


No comments:

Post a Comment