LINQ查询表达式---------join子句

join 子句接受两个源序列作为输入。 每个序列中的元素都必须是可以与另一个序列中的相应属性进行比较的属性,或者包含一个这样的属性。 join子句使用特殊的 equals 关键字比较指定的键是否相等。 join 子句执行的所有联接都是同等联接。 join 子句的输出形式取决于所执行的联接的具体类型。 以下是三种最常见的联接类型:

内部联接

分组联接

左外部联接

  1. class Program
  2. {
  3. public class PerInfo
  4. {
  5. public int Id
  6. {
  7. get;
  8. set;
  9. }
  10. public string Name
  11. {
  12. get;
  13. set;
  14. }
  15. public int Age
  16. {
  17. get;
  18. set;
  19. }
  20. }
  21.  
  22. public class CustInfo
  23. {
  24. public int PerId
  25. {
  26. get;
  27. set;
  28. }
  29. public string Tel
  30. {
  31. get;
  32. set;
  33. }
  34. public string Email
  35. {
  36. get;
  37. set;
  38. }
  39. }
  40.  
  41. static void Main(string[] args)
  42. {
  43. List<PerInfo> perinfos = new List<PerInfo>
  44. {
  45. new PerInfo{Id = , Name = "小白", Age = },
  46. new PerInfo{Id = , Name = "小日", Age = },
  47. new PerInfo{Id = , Name = "小月", Age = },
  48. new PerInfo{Id = , Name = "小明", Age = }
  49. };
  50.  
  51. List<CustInfo> custInfos = new List<CustInfo>
  52. {
  53. new CustInfo{PerId = , Tel = "153******", Email = "123@qq.com"},
  54. new CustInfo{PerId = , Tel = "153****11", Email = "321@qq.com"},
  55. new CustInfo{PerId = , Tel = "134******", Email = "112@qq.com"},
  56. new CustInfo{PerId = , Tel = "134****11", Email = "211@qq.com"},
  57. new CustInfo{PerId = , Tel = "125******", Email = "134@qq.com"},
  58. new CustInfo{PerId = , Tel = "125****11", Email = "431@qq.com"}
  59. };
  60.  
  61. //1、内部联接
  62. var query1 = from p in perinfos
  63. join c in custInfos on p.Id equals c.PerId
  64. select new { NewName = p.Name, NewTel = c.Tel, NewEmail = c.Email };
  65. Console.WriteLine("内部联接:");
  66. foreach (var item in query1)
  67. {
  68. Console.WriteLine(" {0} {1} {2}", item.NewName, item.NewTel, item.NewEmail);
  69. }
  70.  
  71. //2、分组联接_01
  72. var query2 = from p in perinfos
  73. join c in custInfos on p.Id equals c.PerId into groupquery
  74. select new { NewName = p.Name, NewQuery = groupquery };
  75. Console.WriteLine("\n分组联接_01");
  76. foreach (var v in query2)
  77. {
  78. Console.WriteLine("{0}", v.NewName);
  79. foreach (var item in v.NewQuery)
  80. {
  81. Console.WriteLine(" {0} {1}", item.Tel, item.Email);
  82. }
  83. }
  84.  
  85. //3、分组联接_02
  86. var query3 = from p in perinfos
  87. join c in custInfos on p.Id equals c.PerId into groupquery
  88. select groupquery;
  89. Console.WriteLine("\n分组联接_02");
  90. foreach (var v in query3)
  91. {
  92. foreach (var item in v)
  93. {
  94. Console.WriteLine(" {0} {1} {2}", item.PerId, item.Tel, item.Email);
  95. }
  96. }
  97.  
  98. //4、分组联接_03
  99. var query4 = from p in perinfos
  100. join c in custInfos on p.Id equals c.PerId into groupquery
  101. select new
  102. {
  103. NewName = p.Name,
  104. NewQuery = from q in groupquery
  105. where q.PerId >
  106. orderby q.Email descending
  107. select q
  108. };
  109. Console.WriteLine("\n分组联接_03");
  110. foreach (var v in query4)
  111. {
  112. Console.WriteLine("{0}", v.NewName);
  113. foreach (var item in v.NewQuery)
  114. {
  115. Console.WriteLine(" {0} {1} {2}", item.PerId, item.Tel, item.Email);
  116. }
  117. }
  118.  
  119. //5、左外联接_01
  120. var query5 = from p in perinfos
  121. join c in custInfos on p.Id equals c.PerId into groupquery
  122. select groupquery.DefaultIfEmpty(new CustInfo()
  123. {
  124. PerId = p.Id, Tel = "Nothing", Email = "Nothing"
  125. });
  126. Console.WriteLine("\n左外联接_01");
  127. foreach (var v in query5)
  128. {
  129. foreach (var item in v)
  130. {
  131. Console.WriteLine(" {0} {1} {2}", item.PerId, item.Tel, item.Email);
  132. }
  133. }
  134.  
  135. // 6、左外联接_02
  136. var query6 = from p in perinfos
  137. join c in custInfos on p.Id equals c.PerId into groupquery
  138. from item in groupquery.DefaultIfEmpty()
  139. select new { Email = item == null ? "Nothing!" : item.Email, ID = p.Id };
  140.  
  141. Console.WriteLine("\n左外联接_02");
  142. foreach (var v in query6)
  143. {
  144.  
  145. Console.WriteLine(" {0} {1} ", v.ID, v.Email);
  146.  
  147. }
  148.  
  149. Console.ReadLine();
  150. }
  151. }
  1. 输出结果:
  2. 内部联接:
  3. 小白 153****** 123@qq.com
  4. 小白 153****11 321@qq.com
  5. 小日 134****** 112@qq.com
  6. 小日 134****11 211@qq.com
  7. 小明 125****** 134@qq.com
  8. 小明 125****11 431@qq.com
  9.  
  10. 分组联接_01
  11. 小白
  12. 153****** 123@qq.com
  13. 153****11 321@qq.com
  14. 小日
  15. 134****** 112@qq.com
  16. 134****11 211@qq.com
  17. 小月
  18. 小明
  19. 125****** 134@qq.com
  20. 125****11 431@qq.com
  21.  
  22. 分组联接_02
  23. 1 153****** 123@qq.com
  24. 1 153****11 321@qq.com
  25. 2 134****** 112@qq.com
  26. 2 134****11 211@qq.com
  27. 4 125****** 134@qq.com
  28. 4 125****11 431@qq.com
  29.  
  30. 分组联接_03
  31. 小白
  32. 小日
  33. 2 134****11 211@qq.com
  34. 2 134****** 112@qq.com
  35. 小月
  36. 小明
  37. 4 125****11 431@qq.com
  38. 4 125****** 134@qq.com
  39.  
  40. 左外联接_01
  41. 1 153****** 123@qq.com
  42. 1 153****11 321@qq.com
  43. 2 134****** 112@qq.com
  44. 2 134****11 211@qq.com
  45. 3 Nothing Nothing
  46. 4 125****** 134@qq.com
  47. 4 125****11 431@qq.com
  48.  
  49. 左外联接_02
  50. 1 123@qq.com
  51. 1 321@qq.com
  52. 2 112@qq.com
  53. 2 211@qq.com
  54. 3 Nothing!
  55. 4 134@qq.com
  56. 4 431@qq.com

  

LINQ查询表达式---------join子句的更多相关文章

  1. LINQ查询表达式---------select子句

    LINQ查询表达式---------select子句 1.1常见的select子句查询 class Program { public class PerInfo { public int Id { g ...

  2. LINQ查询表达式---------from子句

    LINQ查询表达式---------from子句 LINQ的查询由3基本部分组成:获取数据源,创建查询,执行查询. //1.获取数据源 List<, , , , , }; //创建查询 var ...

  3. LINQ查询表达式---------let子句

    LINQ查询表达式---------let子句 let子句创建一个范围变量来存储结果,变量被创建后,不能修改或把其他表达式的结果重新赋值给它.此范围变量可以再后续的LINQ子句中使用. class P ...

  4. LINQ查询表达式---------orderby子句

    LINQ查询表达式---------orderby子句 LINQ可以按元素的一个或多个属性对元素进行排序. class Program { public class PerInfo { public ...

  5. LINQ查询表达式---------group子句

    LINQ查询表达式---------group子句 LINQ表达式必须以from子句开头,以select或group子句结束.使用guoup子句来返回元素分组后的结果.group 子句返回一个 IGr ...

  6. LINQ查询表达式---------where子句

    LINQ查询表达式---------where子句 where 子句用在查询表达式中,用于指定将在查询表达式中返回数据源中的哪些元素. 它将一个布尔条件(“谓词”)应用于每个源元素(由范围变量引用), ...

  7. 2.3 LINQ查询表达式中 使用select子句 指定目标数据

    本篇讲解LINQ查询的三种形式: 查询对象 自定义查询对象某个属性 查询匿名类型结果 [1.查询结果返回集合元素] 在LINQ查询中,select子句和from子句都是必备子句.LINQ查询表达式必须 ...

  8. LINQ查询表达式---------into

    LINQ查询表达式---------into into 上下文关键字创建一个临时标识符,以便将 group.join 或 select 子句的结果存储到新的标识符 class Program { pu ...

  9. LINQ查询表达式(1) - 查询表达式基础

    LINQ包括五个部分:LINQto Objects.LINQ to DataSets.LINQ to SQL.LINQ to Entities.LINQ to XML. 什么是查询?它有什么用途? “ ...

随机推荐

  1. [Ramda] Create a Query String from an Object using Ramda's toPairs function

    In this lesson, we'll use Ramda's toPairs function, along with map, join, concatand compose to creat ...

  2. php课程 4-14 数组如何定义使用

    php课程 4-14  数组如何定义使用 一.总结 1.各种语言键值对取值和赋值赋值表达式左边的特点是什么? 键值对,用于取值和赋值,取值和赋值的左边都是一样的 2.各种语言键值对取值或者赋值的时候如 ...

  3. HDU 4870 Rating 高斯消元法

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=4870 题意:用两个账号去參加一种比赛,初始状态下两个账号都是零分,每次比赛都用分数低的账号去比赛.有P的概 ...

  4. Python 库的使用 —— dis

    dis:Disassembler of Python byte code into mnemonics. Java.Python.Ruby 1.9 这些语言均使用了栈机器型的 VM.因为是基于栈的实现 ...

  5. 在向server发送请求时发生传输级错误。 (provider: 共享内存提供程序, error: 0 - 管道的还有一端上无不论什么进程。

    作者:卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/36425825 SQL Server 2008 + VS2010 用C#编写的代 ...

  6. sparksql dataset

    java /** *2.0之后使用sparksession即可,不需要再去创建sqlcontext *@author Tele * */ public class Demo { private sta ...

  7. C#与西门子PLC通讯

    1.0  通讯组件概述 通讯组件用于PC与可编程控制器(PLC).智能仪表等进行数据通讯,适用于基于PC高级语言的工业自动化控制系统.组件采用动态链接库文件(*.DLL)的形式,在PC系统的项目工程里 ...

  8. 浅析JAVA的垃圾回收机制(GC)

    1.什么是垃圾回收? 垃圾回收(Garbage Collection)是Java虚拟机(JVM)垃圾回收器提供的一种用于在空闲时间不定时回收无任何对象引用的对象占据的内存空间的一种机制. 注意:垃圾回 ...

  9. 自定义WPF 窗口样式

    原文:自定义WPF 窗口样式 Normal 0 false 7.8 pt 0 2 false false false EN-US ZH-CN X-NONE 自定义 Window 在客户端程序中,经常需 ...

  10. 机器学习: Python with Recurrent Neural Network

    之前我们介绍了Recurrent neural network (RNN) 的原理: http://blog.csdn.net/matrix_space/article/details/5337404 ...