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

本文展示了如何使用VB.NET和C#实现数据库左外连接查询,包括从数据库中获取订单、客户及订单详情等信息,并通过条件筛选进行数据处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值