C#中使用LINQ和lambda实现左链接、右链接、内链接

C#中使用LINQ和lambda实现左链接、右链接、内链接

在 C# 中使用 LINQ 和 lambda 表达式可以实现左链接(Left Join)、右链接(Right Join)和内链接(Inner Join)操作。这些链接操作是针对两个数据集合之间的关联查询,用于获取满足特定条件的匹配项。下面是使用 LINQ 和 lambda 表达式分别实现这些链接操作的示例:

假设我们有两个数据集合:orderscustomers,并且它们之间有一个共同的属性 CustomerId

  1. 左链接(Left Join):

左链接返回两个集合中的所有元素,并且还包括满足指定条件的匹配项。如果右侧的集合没有匹配项,将使用默认值表示。

csharp 复制代码
var leftJoinQuery = from customer in customers
                    join order in orders on customer.CustomerId equals order.CustomerId into customerOrders
                    from co in customerOrders.DefaultIfEmpty()
                    select new { customer.CustomerName, OrderId = co?.OrderId ?? 0 };

使用 Lambda 表达式:

csharp 复制代码
var leftJoinQuery = customers.GroupJoin(
    orders,
    customer => customer.CustomerId,
    order => order.CustomerId,
    (customer, customerOrders) => new
    {
        customer.CustomerName,
        OrderId = customerOrders.Select(co => co?.OrderId ?? 0).FirstOrDefault()
    }
);
  1. 右链接(Right Join):

右链接返回两个集合中的所有元素,并且还包括满足指定条件的匹配项。如果左侧的集合没有匹配项,将使用默认值表示。

csharp 复制代码
var rightJoinQuery = from order in orders
                     join customer in customers on order.CustomerId equals customer.CustomerId into orderCustomers
                     from oc in orderCustomers.DefaultIfEmpty()
                     select new { CustomerName = oc?.CustomerName ?? "N/A", order.OrderId };

使用 Lambda 表达式:

csharp 复制代码
var rightJoinQuery = orders.GroupJoin(
    customers,
    order => order.CustomerId,
    customer => customer.CustomerId,
    (order, orderCustomers) => new
    {
        CustomerName = orderCustomers.Select(oc => oc?.CustomerName ?? "N/A").FirstOrDefault(),
        order.OrderId
    }
);
  1. 内链接(Inner Join):

内链接返回两个集合中满足指定条件的匹配项。

csharp 复制代码
var innerJoinQuery = from order in orders
                     join customer in customers on order.CustomerId equals customer.CustomerId
                     select new { customer.CustomerName, order.OrderId };

使用 Lambda 表达式:

csharp 复制代码
var innerJoinQuery = orders.Join(
    customers,
    order => order.CustomerId,
    customer => customer.CustomerId,
    (order, customer) => new { customer.CustomerName, order.OrderId }
);

以上是使用 LINQ 和 lambda 表达式实现左链接、右链接和内链接操作的示例。通过掌握这些查询技巧,你可以更灵活地处理数据集合之间的关联查询。

相关推荐
路由侠内网穿透1 天前
本地部署 GPS 跟踪系统 Traccar 并实现外部访问
运维·服务器·网络·windows·tcp/ip
ZERO_pan1 天前
服务器装机遇到的问题
运维·服务器
l1t1 天前
利用DeepSeek实现服务器客户端模式的DuckDB原型
服务器·c语言·数据库·人工智能·postgresql·协议·duckdb
杀气丶1 天前
Linux下运行芙蕾雅天堂2【俄文简译L2FATER】
运维·服务器·天堂2·l2fater·l2fater.cn
喵手1 天前
玩转Java网络编程:基于Socket的服务器和客户端开发!
java·服务器·网络
Tisfy1 天前
服务器 - 从一台服务器切换至另一台服务器(损失数十条访客记录)
运维·服务器
未来之窗软件服务1 天前
幽冥大陆(二)RDIFSDK 接口文档:布草洗涤厂高效运营的技术桥梁C#—东方仙盟
开发语言·c#·rdif·仙盟创梦ide·东方仙盟
猎板PCB黄浩1 天前
从废料到碳减排:猎板 PCB 埋容埋阻的绿色制造革命,如何实现环保与性能双赢
java·服务器·制造
1uther1 天前
Unity核心概念⑨:Screen
开发语言·游戏·unity·c#·游戏引擎
阿幸软件杂货间1 天前
Office转PDF转换器v1.0.py
开发语言·pdf·c#