Linq to sql 三つテーブル left out join

来源:互联网 发布:大数据图标 编辑:程序博客网 时间:2024/06/05 11:58

vb.net :left out join 

SELECT
  dbo.Orders.OrderID
  , dbo.Customers.CompanyName
  , dbo.Orders.CustomerID
  , dbo.[Order Details].ProductID
  , dbo.[Order Details].UnitPrice
  , dbo.[Order Details].Quantity
  , dbo.[Order Details].Discount
  , dbo.Customers.ContactName
  , dbo.Customers.ContactTitle
  , dbo.Customers.Address 
FROM
  dbo.Orders 
  LEFT JOIN dbo.[Order Details] 
    ON dbo.Orders.OrderID = dbo.[Order Details].OrderID 
  LEFT JOIN dbo.Customers 
    ON dbo.Orders.CustomerID = dbo.Customers.CustomerID
where dbo.Orders.OrderID <= 10250

ーーーーーー  ↓↓↓↓↓↓↓↓↓↓

            Dim query222 = From order In db.Orders
                           From vendor In
            db.Order_Details.Where(Function(v) v.OrderID = order.OrderID).DefaultIfEmpty()
                           From status In
            db.Customers.Where(Function(s) s.CustomerID = order.CustomerID).DefaultIfEmpty()
                           Select New QueryResult With {.OrderID = order.OrderID, .CustomerID = order.CustomerID, .ProductID = vendor.ProductID, .CustomerName = status.CompanyName}
            Dim where = query222.Where(Function(tt) tt.OrderID <= 10250)
            Dim lst = where.ToList()

                            ↓↓↓

  SELECT
    [Extent1].[OrderID] AS [OrderID]
    , CAST([Extent1].[OrderID] AS nvarchar(max)) AS [C1]
    , [Extent1].[CustomerID] AS [CustomerID]
    , CAST([Extent2].[ProductID] AS nvarchar(max)) AS [C2]
    , [Extent3].[CompanyName] AS [CompanyName] 
  FROM
    [dbo].[Orders] AS [Extent1] 
    LEFT OUTER JOIN [dbo].[Order Details] AS [Extent2] 
      ON [Extent2].[OrderID] = [Extent1].[OrderID] 
    LEFT OUTER JOIN [dbo].[Customers] AS [Extent3] 
      ON [Extent3].[CustomerID] = [Extent1].[CustomerID] 
  WHERE
    CAST( 
      CAST([Extent1].[OrderID] AS nvarchar(max)) AS float
    ) <= cast(10250 as float (53))

ーーーーーー

Models:QueryResult.vb

Public Class QueryResult
    Property OrderID As String
    Property CustomerID As String
    Property CustomerName As String
    Property ProductID As String
    Property ProductName As String
    Property UnitPrice As String
End Class


-----------------------------------------------------------------------------------------


c#.net :

var query =     from order in dc.Orders    from vendor     in dc.Vendors        .Where(v => v.Id == order.VendorId)        .DefaultIfEmpty()    from status     in dc.Status        .Where(s => s.Id == order.StatusId)        .DefaultIfEmpty()    select new { Order = order, Vendor = vendor, Status = status }     //Vendor and Status properties will be null if the left join is null

------------------------------------------------------------------------------------------------ 

f1 like '%A%' or f1 like '%O%'

            Dim aa As String = "A,O"
            Dim whereCondition As String() = aa.Split(",")

            Dim query222 = (From order In db.Orders
                            From vendor In
            db.Order_Details.Where(Function(v) v.OrderID = order.OrderID).DefaultIfEmpty()
                            From status In
            db.Customers.Where(Function(s) s.CustomerID = order.CustomerID).DefaultIfEmpty()
                            Select New QueryResult With {.OrderID = order.OrderID, .CustomerID = order.CustomerID,
                               .ProductID = vendor.ProductID, .CustomerName = status.CompanyName}
                                ).Where(Function(tt) tt.OrderID <= 10250)

            Dim queryP1 = query222.Where(Function(v) v.CustomerID.Contains("A")).ToList()
            Dim queryP2 = query222.Where(Function(v) v.CustomerID.Contains("O")).ToList()

            Dim all = queryP1.Union(queryP2)
            Dim lst = all.ToList()


0 0
原创粉丝点击