废话不多说直接上代码演示:
接下来,定义 Order
和 Customer
类,以及一些示例数据
using System;
using System.Linq;
using System.Collections.Generic;
class Order
{
public int OrderId { get; set; }
public string OrderName { get; set; }
public int CustomerId { get; set; }
}
class Customer
{
public int CustomerId { get; set; }
public string CustomerName { get; set; }
}
//创建两个表 用CustomerId 为关联条件
var orders = new List<Order>
{
new Order { OrderId = 1, OrderName = "Ordername 1", CustomerId = 1001 },
new Order { OrderId = 2, OrderName = "Ordername 2", CustomerId = 1002 },
new Order { OrderId = 3, OrderName = "Ordername 3", CustomerId = 1003 },
};
var customers = new List<Customer>
{
new Customer { CustomerId = 1001, CustomerName = "Alice" },
new Customer { CustomerId = 1003, CustomerName = "Bob" },
};
内连接示例:
var innerJoinQuery =
from order in orders
join customer in customers
on order.CustomerId equals customer.CustomerId
select new
{
OrderName = order.OrderName,
CustomerName = customer.CustomerName
};
Console.WriteLine("Inner Join Results:");
foreach (var result in innerJoinQuery)
{
Console.WriteLine($"Order: {result.OrderName}, Customer: {result.CustomerName}");
}
上述代码将执行内连接操作,只返回匹配的数据。结果只包括 orders
和 customers
中具有相同 CustomerId
的行。
左连接示例:
var leftJoinQuery =
from order in orders
join customer in customers
on order.CustomerId equals customer.CustomerId into customerGroup
from customer in customerGroup.DefaultIfEmpty()
select new
{
OrderName = order.OrderName,
CustomerName = (customer != null) ? customer.CustomerName : "N/A"
};
Console.WriteLine("\nLeft Join Results:");
foreach (var result in leftJoinQuery)
{
Console.WriteLine($"Order: {result.OrderName}, Customer: {result.CustomerName}");
}
上述代码将执行左连接操作,返回了 orders
表的所有行,以及与之匹配的 customers
行(如果有匹配的话)。如果没有匹配的话,CustomerName
将标记为 "N/A"。
右连接示例:
var rightJoinQuery =
from customer in customers
join order in orders
on customer.CustomerId equals order.CustomerId into orderGroup
from order in orderGroup.DefaultIfEmpty()
select new
{
CustomerName = customer.CustomerName,
OrderName = (order != null) ? order.OrderName : "N/A"
};
Console.WriteLine("Right Join Results:");
foreach (var result in rightJoinQuery)
{
Console.WriteLine($"Customer: {result.CustomerName}, Order: {result.OrderName}");
}
上述代码模拟了 right join
操作,返回了 customers
表的所有行,以及与之匹配的 orders
行(如果有匹配的话)。如果没有匹配的话,OrderName
将标记为 "N/A"。