一、JOIN的作用

1、使用联接来结合两个或更多的集合的数据。

2、联接操作接受两个集合然后创建一个临时的对象集合,每一个对象包含原始集合对象中的所有字段。

Note:这里是包含而不是这个原实集合的字段一定要使用,这要看SELECT原始集合的哪些字段。

二、LINQ表达式的语法

Jion Identifier in Collection2 On Field1 equals Field2

     Note:使用上下文关键字“equals”来比较字段,不能用“==”这个运算符

示例:Student.cs

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace LINQDemoWinForm
 8 {
 9     class Student
10     {
11         public int ID { get;set;}
12         public string SName { get; set; }
13         public int Age { get; set; }
14     }
15 }

View Code

Product.cs

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace LINQDemoWinForm
 8 {
 9     class Product
10     {
11         public int ID { get; set; }
12         public string PName { get; set; }
13         public double Price { get; set; }
14     }
15 }

View Code

LINQ语句

 private void button1_Click(object sender, EventArgs e){//初始化Student数组Student[] arrStu = new Student[]{new Student{ID=1,SName="zhangsan",Age=20},new Student{ID=2,SName="lisi",Age=21},new Student{ID=3,SName="wangwu",Age=23},new Student{ID=4,SName="liuliu",Age=24},};//初始化Product数组Product[] arrPro = new Product[]{new Product{ID=1,PName="Apple",Price=2.25},new Product{ID=2,PName="Orange",Price=5.25},new Product{ID=3,PName="Banana",Price=7.5},new Product{ID=4,PName="StrawBerry",Price=6.5},};//LINQ语句var query = from sItem in arrStujoin pItem in arrProon sItem.ID equals pItem.IDselect new { sItem.SName, sItem.Age, pItem.PName, pItem.Price };//Select后面接一个匿名对象 StringBuilder sbRes = new StringBuilder();//打印foreach (var item in query){sbRes.AppendFormat("SName:{0},Age:{1},PName:{2},Price:{3}", item.SName, item.Age, item.PName, item.Price);sbRes.AppendLine();}MessageBox.Show(sbRes.ToString());}

View Code

执行结果:

三、标准查询运算符—Join

原函数:

 1  //
 2         // 摘要:
 3         //     基于匹配键对两个序列的元素进行关联。 使用默认的相等比较器对键进行比较。
 4         //
 5         // 参数:
 6         //   outer:
 7         //     要联接的第一个序列。
 8         //
 9         //   inner:
10         //     要与第一个序列联接的序列。
11         //
12         //   outerKeySelector:
13         //     用于从第一个序列的每个元素提取联接键的函数。
14         //
15         //   innerKeySelector:
16         //     用于从第二个序列的每个元素提取联接键的函数。
17         //
18         //   resultSelector:
19         //     用于从两个匹配元素创建结果元素的函数。
20         //
21         // 类型参数:
22         //   TOuter:
23         //     第一个序列中的元素的类型。
24         //
25         //   TInner:
26         //     第二个序列中的元素的类型。
27         //
28         //   TKey:
29         //     键选择器函数返回的键的类型。
30         //
31         //   TResult:
32         //     结果元素的类型。
33         //
34         // 返回结果:
35         //     一个具有 TResult 类型元素的 System.Collections.Generic.IEnumerable<T>,这些元素是通过对两个序列执行内部联接得来的。
36         //
37         // 异常:
38         //   System.ArgumentNullException:
39         //     outer 或 inner 或 outerKeySelector 或 innerKeySelector 或 resultSelector 为 null。
40         public static IEnumerable<TResult> Join<TOuter, TInner, TKey, TResult>(this IEnumerable<TOuter> outer, IEnumerable<TInner> inner, Func<TOuter, TKey> outerKeySelector, Func<TInner, TKey> innerKeySelector, Func<TOuter, TInner, TResult> resultSelector);

View Code

Note:这是一个泛型的扩展方法。outerKeySelector,innerKeySelector这两个参数是两个集合需要比较的键。resultSelector相当于前面的Selcet,后面可以接一个匿名对象。

示例:

使用到前面的Student,Product类,运行结果和前面一样。

 1 private void button1_Click_1(object sender, EventArgs e)
 2         {
 3             //初始化Student数组
 4             Student[] arrStu = new Student[]{
 5                 new Student{ID=1,SName="zhangsan",Age=20},
 6                 new Student{ID=2,SName="lisi",Age=21},
 7                 new Student{ID=3,SName="wangwu",Age=23},
 8                 new Student{ID=4,SName="liuliu",Age=24},
 9             };
10             //初始化Product数组
11             Product[] arrPro = new Product[]{
12                 new Product{ID=1,PName="Apple",Price=2.25},
13                 new Product{ID=2,PName="Orange",Price=5.25},
14                 new Product{ID=3,PName="Banana",Price=7.5},
15                 new Product{ID=4,PName="StrawBerry",Price=6.5},
16             };
17             //标准查询运算符
18             var query = arrStu.Join(arrPro, s => s.ID, p => p.ID, (s, p) =>new { s.SName, s.Age, p.PName, p.Price });
19             StringBuilder sbRes = new StringBuilder();
20             //打印
21             foreach (var item in query)
22             {
23                 sbRes.AppendFormat("SName:{0},Age:{1},PName:{2},Price:{3}", item.SName, item.Age, item.PName, item.Price);
24                 sbRes.AppendLine();
25             }
26             MessageBox.Show(sbRes.ToString());
27         }

View Code

转载于:https://www.cnblogs.com/cherish836138981/p/6650527.html

LINQ学习——JOIN相关推荐

  1. Linq 学习笔记(二)

    Linq 学习笔记(二) 下面就来介绍一些查询的示例: 1.Linq查询 var racers = from r in Formula1.GetChampions() where r.Wins > ...

  2. 一起谈.NET技术,Linq学习笔记

    写在前面 其实在09年就已经学习过Linq了,并被她那优美的语法所吸引,只是现在所在的公司还在使用VS2005在.Net2.0的框架下面的开发,所以Linq也很久没有用过了,最近看部门的同事对这个有些 ...

  3. LINQ 之 JOIN(2)

    LINQ之Join 分类: LINQ 2010-06-30 14:23 333人阅读 评论(0) 收藏 举报 适用场景:在我们表关系中有一对一关系,一对多关系,多对多关系等.对各个表之间的关系,就用这 ...

  4. Linq学习比较第2篇

    Linq学习比较第2篇 参考程序: //增             t_User user = new t_User();             user.UserName = "大气象& ...

  5. LINQ学习之旅——最后一站LTX之基础和编程接口所包含类的简介

    对LINQ TO SQL的内容讲解将告一段落,下面我们进入LINQ学习之旅的最后一站"LTX",即LINQ TO XML.当前XML技术在应用开发中显得越来越重要,已成为各类数据交 ...

  6. 最佳ASP.net之LINQ学习资料

    在使用LINQ过程中偶然有点心得想记录下来,没想到查阅到一个非常好的网站,直接转载了. 1. [推荐]LINQ系列文章,适合按部就班学习或查阅 http://kb.cnblogs.com/page/4 ...

  7. linq学习笔记(2):DataContext

        在前面学习了C#3.0新语特性和改进,这些新特性在我们编写程序时为我们提供了非常大的帮助.从现在开始正式学习LINQ.     LINQ是Language Integrated Query的简 ...

  8. LINQ学习笔记之四:查询内存对象

    附上WORD文档,从这里下载. 查询内存对象 这一章中主要介绍了使用LINQ查询内存对象的一些基本语法.在下一章将会有更高级的用法介绍.本章中的示例数据是一个简单的出版社信息.这里是数据文件.下面的图 ...

  9. LINQ学习之旅——准备(2)

    上一节,我有提到过LINQ中还大量使用了C#3.0的一些新的语言特性,比如:局部变量类型推断.Lambda表达式.表达式树以及扩展方法.这些特性就是我今天主要讲的内容,也是学习LINQ的第二项准备工作 ...

最新文章

  1. php 剪贴板,之Windows中的剪贴板
  2. [译]如何在C#中调试LINQ查询
  3. codeforces:65
  4. 【2019牛客暑期多校训练营(第五场)- E】independent set 1(最大独立集,状压dp)
  5. php 可变变量 $$name
  6. 安全分析:叫好不叫座
  7. dvwa通关教程超详细
  8. 当代移动通信发展四个阶段
  9. 【矩阵乘法】外部矩阵乘法
  10. Silvaco 学习笔记——物理模型:载流子产生复合模型
  11. 代理服务器有问题怎么办?
  12. MySQL5.6 GTID
  13. php多用户表白源码,php源码]阿狸表白自动生成源码
  14. 自动备份android,Android自动备份错误
  15. 综合各代码在线运行 jsrun
  16. vscode 代码出现波浪线
  17. 如何去除CSDN博客图片水印
  18. 7-55 吉老师的回归 (15 分)
  19. 天喻信息上市前陷股权纠纷 法院已立案
  20. 打造自己的LoRaWAN网关,进阶2:处理异常

热门文章

  1. 使用ObjectDataSource 显示数据
  2. [机器学习-sklearn]K-means之make_blobs聚类数据生成器
  3. 【Tensorflow】TF中的字符串tf.string
  4. 吴恩达深度学习 —— 4.2 深层网络中的前向传播
  5. 吴恩达深度学习 —— 3.6 激活函数
  6. HTML表格基础学习
  7. 【人工智能中“预测”的知识点】
  8. 运动搜索(运动估计)知识
  9. freertos 创建互斥量_FreeRTOS的信号量和互斥量
  10. Hanoi 汉诺塔——通俗易懂地讲解(c++)