C#测试linq中的左连接的基本用法

  使用linq联表或者连接两个对象集合查询时一般使用的是join关键字,返回结果中包含两个表或两个对象集合中连接字段相等的数据记录,如果要实现sql语句中的左连接效果,并没有现成的left join关键字,此时可以使用DefaultIfEmpty 实现左连接(也可以GroupJoin和SelectMany,具体请百度或咨询大模型)。
  首先定义两个集合对象,如下所示:

List<Customer> lstCustomer = new List<Customer>();
lstCustomer.Add(new Customer { Id = 1, Name = "张三", Sex = "男" });
lstCustomer.Add(new Customer { Id = 2, Name = "李四", Sex = "男" });
lstCustomer.Add(new Customer { Id = 3, Name = "王五", Sex = "男" });
lstCustomer.Add(new Customer { Id = 4, Name = "赵六", Sex = "男" });
lstCustomer.Add(new Customer { Id = 5, Name = "钱多多", Sex = "男" });
lstCustomer.Add(new Customer { Id = 6, Name = "李雷", Sex = "男" });
lstCustomer.Add(new Customer { Id = 7, Name = "韩梅梅", Sex = "女" });

List<Contact> lstContact = new List<Contact>();
lstContact.Add(new Contact { Id = 2, Address = "北京", Email = "123@qq.com", Telephone = "123456789" });
lstContact.Add(new Contact { Id = 4, Address = "上海", Email = "456@qq.com", Telephone = "123456789" });
lstContact.Add(new Contact { Id = 6, Address = "天津", Email = "789@qq.com", Telephone = "123456789" });
lstContact.Add(new Contact { Id = 8, Address = "重庆", Email = "101112@qq.com", Telephone = "123456789" });
lstContact.Add(new Contact { Id = 10, Address = "伦敦", Email = "121314@qq.com", Telephone = "123456789" });

  首先是join关键字的效果,如下所示,join仅返回两个集合中id相同的数据记录。

var result = from g in lstCustomer
             join h in lstContact on g.Id equals h.Id
             select new
             {
                 ID = g.Id,
                 Name = g.Name,
                 Address = h.Address,
                 Email = h.Email
             };

在这里插入图片描述
  然后就是左连接使用示例,如下所示:

var result = from g in lstCustomer
             join h in lstContact on g.Id equals h.Id into LeftJoinGroup
             from  k in LeftJoinGroup.DefaultIfEmpty()
             select new
             {
                 ID = g.Id,
                 Name = g.Name,
                 Address = k?.Address,
                 Email = k?.Email
             };

在这里插入图片描述

参考文献:
[1]https://www.cnblogs.com/keeplearningandsharing/p/16620651.html
[2]https://cloud.tencent.com/developer/article/2414328

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值