背景介绍:

在无主外键关系的表中如果如果要关联就要用Join()和GroupJoin()方法了,我们先看Join()方法,代码如下:

static void Main(string[] args)
{List<SW_XSDD> sw_xsdd = new List<SW_XSDD>(){new SW_XSDD { com_id = "SH01",vou_no = "100",corr_id = "A",corr_date = DateTime.Now},new SW_XSDD { com_id = "SH02",vou_no = "200",corr_id = "B",corr_date = DateTime.Now.AddDays(1)},new SW_XSDD { com_id = "SH03",vou_no = "300",corr_id = "C",corr_date = DateTime.Now.AddDays(2)}};List<SW_XSDD_C> sw_xsdd_c = new List<SW_XSDD_C>(){new SW_XSDD_C { com_id = "SH01",vou_no = "100",item_no = "101700001",number = 10,vou_line_no = 1},new SW_XSDD_C { com_id = "SH01",vou_no = "100",item_no = "101700002",number = 11,vou_line_no = 2},new SW_XSDD_C { com_id = "SH01",vou_no = "100",item_no = "101700003",number = 12,vou_line_no = 3},new SW_XSDD_C { com_id = "SH01",vou_no = "100",item_no = "101700004",number = 13,vou_line_no = 4},new SW_XSDD_C { com_id = "SH01",vou_no = "100",item_no = "101700005",number = 14,vou_line_no = 5},new SW_XSDD_C { com_id = "SH01",vou_no = "100",item_no = "101700006",number = 15,vou_line_no = 6},new SW_XSDD_C { com_id = "SH02",vou_no = "200",item_no = "101700007",number = 16,vou_line_no = 1},new SW_XSDD_C { com_id = "SH02",vou_no = "200",item_no = "101700008",number = 17,vou_line_no = 2},new SW_XSDD_C { com_id = "SH02",vou_no = "200",item_no = "101700009",number = 18,vou_line_no = 3},new SW_XSDD_C { com_id = "SH02",vou_no = "200",item_no = "101700010",number = 19,vou_line_no = 4},new SW_XSDD_C { com_id = "SH02",vou_no = "200",item_no = "101700011",number = 20,vou_line_no = 5},new SW_XSDD_C { com_id = "SH02",vou_no = "200",item_no = "101700012",number = 21,vou_line_no = 6},};var Lists = sw_xsdd.Join(sw_xsdd_c, p => new { com_id = p.com_id, vou_no = p.vou_no }, q => new { com_id = q.com_id, vou_no = q.vou_no }, (p, q) => new { com_id = p.com_id, vou_no = p.vou_no, vou_line_no = q.vou_line_no, corr_id = p.corr_id, corr_date = p.corr_date, item_no = q.item_no, number = q.number });foreach (var list in Lists){Console.WriteLine($"{list.com_id}-{list.vou_no}-{list.vou_line_no}-{list.item_no}-{list.number}-{list.corr_id}-{list.corr_date}");}Console.Read();
}public class SW_XSDD
{public string com_id { get; set; }public string vou_no { get; set; }public string corr_id { get; set; }public DateTime corr_date { get; set; }
}public class SW_XSDD_C
{public string com_id { get; set; }public string vou_no { get; set; }public int vou_line_no { get; set; }public string item_no { get; set; }public int number { get; set; }
}

上述代码中SW_XSDD实体类和SW_XSDD_C实体类通过 com_id和vou_no 这两个字段关联,在SW_XSDD中存在一条com_id为SH03的数据,这条数据在SW_XSDD_C中因为没有对应数据是无法关联到的,运行结果如下所示:

从运行结果中得知,Join()方法应该是SQL中INNER JOIN,SW_XSDD_C中没有的数据就不显示了。

下面再看GroupJoin()方法,代码如下:

public class SW_XSDD
{public string com_id { get; set; }public string vou_no { get; set; }public string corr_id { get; set; }public DateTime corr_date { get; set; }
}public class SW_XSDD_C
{public string com_id { get; set; }public string vou_no { get; set; }public int vou_line_no { get; set; }public string item_no { get; set; }public int number { get; set; }
}
static void Main(string[] args)
{List<SW_XSDD> sw_xsdd = new List<SW_XSDD>(){new SW_XSDD { com_id = "SH01",vou_no = "100",corr_id = "A",corr_date = DateTime.Now},new SW_XSDD { com_id = "SH02",vou_no = "200",corr_id = "B",corr_date = DateTime.Now.AddDays(1)},new SW_XSDD { com_id = "SH03",vou_no = "300",corr_id = "C",corr_date = DateTime.Now.AddDays(2)}};List<SW_XSDD_C> sw_xsdd_c = new List<SW_XSDD_C>(){new SW_XSDD_C { com_id = "SH01",vou_no = "100",item_no = "101700001",number = 10,vou_line_no = 1},new SW_XSDD_C { com_id = "SH01",vou_no = "100",item_no = "101700002",number = 11,vou_line_no = 2},new SW_XSDD_C { com_id = "SH01",vou_no = "100",item_no = "101700003",number = 12,vou_line_no = 3},new SW_XSDD_C { com_id = "SH01",vou_no = "100",item_no = "101700004",number = 13,vou_line_no = 4},new SW_XSDD_C { com_id = "SH01",vou_no = "100",item_no = "101700005",number = 14,vou_line_no = 5},new SW_XSDD_C { com_id = "SH01",vou_no = "100",item_no = "101700006",number = 15,vou_line_no = 6},new SW_XSDD_C { com_id = "SH02",vou_no = "200",item_no = "101700007",number = 16,vou_line_no = 1},new SW_XSDD_C { com_id = "SH02",vou_no = "200",item_no = "101700008",number = 17,vou_line_no = 2},new SW_XSDD_C { com_id = "SH02",vou_no = "200",item_no = "101700009",number = 18,vou_line_no = 3},new SW_XSDD_C { com_id = "SH02",vou_no = "200",item_no = "101700010",number = 19,vou_line_no = 4},new SW_XSDD_C { com_id = "SH02",vou_no = "200",item_no = "101700011",number = 20,vou_line_no = 5},new SW_XSDD_C { com_id = "SH02",vou_no = "200",item_no = "101700012",number = 21,vou_line_no = 6},};var Lists = sw_xsdd.GroupJoin(sw_xsdd_c, p => new { com_id = p.com_id, vou_no = p.vou_no }, q => new { com_id = q.com_id, vou_no = q.vou_no }, (p, k) => new { com_id = p.com_id, vou_no = p.vou_no,corr_id = p.corr_id, corr_date = p.corr_date,rest = k });foreach (var list in Lists){Console.WriteLine($"{list.com_id}-{list.vou_no}-{list.corr_id}-{list.corr_date}");foreach (var l in list.rest){Console.WriteLine($"{l.vou_line_no}-{l.item_no}-{l.number}");}}Console.Read();
}

在这句代码中:

var Lists = sw_xsdd.GroupJoin(sw_xsdd_c, p => new { com_id = p.com_id, vou_no = p.vou_no }, q => new { com_id = q.com_id, vou_no = q.vou_no }, (p, k) => new { com_id = p.com_id, vou_no = p.vou_no,corr_id = p.corr_id, corr_date = p.corr_date,rest = k });

K为类型为:,所以无法直接取出SW_XSDD_C中特有的字段,需要用到双重循环实现,运行结果如下所示:

可以看到SW_XSDD中com_id为SH03的数据显示出来了,只是没有SW_XSDD_C中的数据,类似于SQL 中的 LEFT JOIN。

C#中IEnumerableT.Join()和IEnumerableT.GroupJoin()简单使用相关推荐

  1. java多线程中的join方法详解

    java多线程中的join方法详解 方法Join是干啥用的? 简单回答,同步,如何同步? 怎么实现的? 下面将逐个回答. 自从接触Java多线程,一直对Join理解不了.JDK是这样说的:join p ...

  2. SQL 中 left join 的底层原理(各种JOIN的复杂度探究)

    01. 前言 写过或者学过 SQL 的人应该都知道 left join,知道 left join 的实现的效果,就是保留左表的全部信息,然后把右表往左表上拼接,如果拼不上就是 null.除了 left ...

  3. mysql的join语句使用_在MySQL中使用JOIN语句进行连接操作的详细教程

    到目前,我们已经学习了从一个表中获取数据.这是简单的需要,但在大多数现实MySQL的使用,经常需要将数据从多个表中的一个单一的查询. 可以使用多个表中的单一SQL查询.在MySQL中联接(join)行 ...

  4. 你知道 Sql 中 left join 的底层原理吗?

    总第165篇/张俊红 01.前言 写过或者学过 Sql 的人应该都知道 left join,知道 left join 的实现的效果,就是保留左表的全部信息,然后把右表往左表上拼接,如果拼不上就是 nu ...

  5. 游标sql server_了解游标并将其替换为SQL Server中的JOIN

    游标sql server Relational database management systems including SQL Server are very good at processing ...

  6. 简单介绍oracle执行计划,Oracle性能优化之oracle中常见的执行计划及其简单解释

    一.访问表执行计划 1.table access full:全表扫描.它会访问表中的每一条记录(读取高水位线以内的每一个数据块). 2.table access by user rowid:输入源ro ...

  7. sql语句中left join和inner join中的on与where的区别分析

    原文:sql语句中left join和inner join中的on与where的区别分析 关于SQL SERVER的表联接查询INNER JOIN .LEFT JOIN和RIGHT JOIN,经常会用 ...

  8. 关于hive中Map join 时大表left join小表的问题

    在hive中,(启用Map join时) 大表left join小表,加载从右向左,所以小表会加载进内存,存储成map键值对,通过大表驱动小表,来进行join,即大表中的join字段作为key 来获取 ...

  9. 13. 找出数组中重复的数字【难度: 简单 / 知识点: 模拟】

    13. 找出数组中重复的数字[难度: 简单 / 知识点: 模拟] 方法一: map 计数 时间复杂度O(nlongn) 空间复杂度多了一个二叉树 class Solution {public:int ...

最新文章

  1. 二十二、新人成才之路《做人七项原则 做一个节俭惜福的人》
  2. 消息服务发送短信,手机接收不到短信解决思路
  3. 浙江大学《深度学习与行人重识别》课程课件
  4. TCP/IP状态详解
  5. android开发学习 ------- 弹出框
  6. YOLOv3: 训练自己的数据(绝对经典版本1)
  7. x·dy+y²·sinx·dx=0
  8. Nuget包管理工具(程序包控制台执行语句)
  9. Linux内核DTB文件启动的几种方式
  10. python递归函数分叉树枝_python递归函数绘制分形树的方法
  11. 重庆市中职计算机一级考试,重庆市计算机一级考试题库答案
  12. NTC热敏电阻的主要技术参数
  13. 负载均衡下的多台tomcat服务器,通过memcache实现session共享
  14. android软件开发
  15. 08-02-loggin-模块
  16. termux使用教程python手机_渗透测试|利用手机攻击电脑(Termux终端初体验)
  17. 【案例1】图书馆管理系统毕业论文
  18. 广州蓝景分享—遇到网页慢,我们该怎么办?
  19. windows安装RabbitMQ以及Erlang
  20. tekton 和 Argocd的区别

热门文章

  1. 为什么公司要努力发展数字化战略
  2. linux用户及权限详解(20170425)
  3. android--------Popupwindow的使用
  4. iredmail邮件服务器之修改默认的web服务端口号
  5. Linux 定时执行命令 crontab
  6. 关于ubuntu 是否需要使用std::到问题。
  7. kangle支不支持PHP_【转载】PHP调用kangle的API
  8. Eclipse中Copy Qualified Name复制类全名解决办法
  9. c4.5算法python实现_算法:用Python实现—最优化算法
  10. 探测器反向偏压_近红外和可见光双模有机光电探测器