LINQ学习——JOIN
一、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相关推荐
- Linq 学习笔记(二)
Linq 学习笔记(二) 下面就来介绍一些查询的示例: 1.Linq查询 var racers = from r in Formula1.GetChampions() where r.Wins > ...
- 一起谈.NET技术,Linq学习笔记
写在前面 其实在09年就已经学习过Linq了,并被她那优美的语法所吸引,只是现在所在的公司还在使用VS2005在.Net2.0的框架下面的开发,所以Linq也很久没有用过了,最近看部门的同事对这个有些 ...
- LINQ 之 JOIN(2)
LINQ之Join 分类: LINQ 2010-06-30 14:23 333人阅读 评论(0) 收藏 举报 适用场景:在我们表关系中有一对一关系,一对多关系,多对多关系等.对各个表之间的关系,就用这 ...
- Linq学习比较第2篇
Linq学习比较第2篇 参考程序: //增 t_User user = new t_User(); user.UserName = "大气象& ...
- LINQ学习之旅——最后一站LTX之基础和编程接口所包含类的简介
对LINQ TO SQL的内容讲解将告一段落,下面我们进入LINQ学习之旅的最后一站"LTX",即LINQ TO XML.当前XML技术在应用开发中显得越来越重要,已成为各类数据交 ...
- 最佳ASP.net之LINQ学习资料
在使用LINQ过程中偶然有点心得想记录下来,没想到查阅到一个非常好的网站,直接转载了. 1. [推荐]LINQ系列文章,适合按部就班学习或查阅 http://kb.cnblogs.com/page/4 ...
- linq学习笔记(2):DataContext
在前面学习了C#3.0新语特性和改进,这些新特性在我们编写程序时为我们提供了非常大的帮助.从现在开始正式学习LINQ. LINQ是Language Integrated Query的简 ...
- LINQ学习笔记之四:查询内存对象
附上WORD文档,从这里下载. 查询内存对象 这一章中主要介绍了使用LINQ查询内存对象的一些基本语法.在下一章将会有更高级的用法介绍.本章中的示例数据是一个简单的出版社信息.这里是数据文件.下面的图 ...
- LINQ学习之旅——准备(2)
上一节,我有提到过LINQ中还大量使用了C#3.0的一些新的语言特性,比如:局部变量类型推断.Lambda表达式.表达式树以及扩展方法.这些特性就是我今天主要讲的内容,也是学习LINQ的第二项准备工作 ...
最新文章
- php 剪贴板,之Windows中的剪贴板
- [译]如何在C#中调试LINQ查询
- codeforces:65
- 【2019牛客暑期多校训练营(第五场)- E】independent set 1(最大独立集,状压dp)
- php 可变变量 $$name
- 安全分析:叫好不叫座
- dvwa通关教程超详细
- 当代移动通信发展四个阶段
- 【矩阵乘法】外部矩阵乘法
- Silvaco 学习笔记——物理模型:载流子产生复合模型
- 代理服务器有问题怎么办?
- MySQL5.6 GTID
- php多用户表白源码,php源码]阿狸表白自动生成源码
- 自动备份android,Android自动备份错误
- 综合各代码在线运行 jsrun
- vscode 代码出现波浪线
- 如何去除CSDN博客图片水印
- 7-55 吉老师的回归 (15 分)
- 天喻信息上市前陷股权纠纷 法院已立案
- 打造自己的LoRaWAN网关,进阶2:处理异常
热门文章
- 使用ObjectDataSource 显示数据
- [机器学习-sklearn]K-means之make_blobs聚类数据生成器
- 【Tensorflow】TF中的字符串tf.string
- 吴恩达深度学习 —— 4.2 深层网络中的前向传播
- 吴恩达深度学习 —— 3.6 激活函数
- HTML表格基础学习
- 【人工智能中“预测”的知识点】
- 运动搜索(运动估计)知识
- freertos 创建互斥量_FreeRTOS的信号量和互斥量
- Hanoi 汉诺塔——通俗易懂地讲解(c++)