LINQ学习——JOIN
一、JOIN的作用
1、使用联接来结合两个或更多的集合的数据。
2、联接操作接受两个集合然后创建一个临时的对象集合,每一个对象包含原始集合对象中的所有字段。
Note:这里是包含而不是这个原实集合的字段一定要使用,这要看SELECT原始集合的哪些字段。
二、LINQ表达式的语法
Jion Identifier in Collection2 On Field1 equals Field2
Note:使用上下文关键字“equals”来比较字段,不能用“==”这个运算符
示例:Student.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace LINQDemoWinForm
{
class Student
{
public int ID { get;set;}
public string SName { get; set; }
public int Age { get; set; }
}
}
Product.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace LINQDemoWinForm
{
class Product
{
public int ID { get; set; }
public string PName { get; set; }
public double Price { get; set; }
}
}
LINQ语句
private void button1_Click(object sender, EventArgs e)
{
//初始化Student数组
Student[] arrStu = new Student[]{
new Student{ID=,SName="zhangsan",Age=},
new Student{ID=,SName="lisi",Age=},
new Student{ID=,SName="wangwu",Age=},
new Student{ID=,SName="liuliu",Age=},
};
//初始化Product数组
Product[] arrPro = new Product[]{
new Product{ID=,PName="Apple",Price=2.25},
new Product{ID=,PName="Orange",Price=5.25},
new Product{ID=,PName="Banana",Price=7.5},
new Product{ID=,PName="StrawBerry",Price=6.5},
};
//LINQ语句
var query = from sItem in arrStu
join pItem in arrPro
on sItem.ID equals pItem.ID
select 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());
}
执行结果:

三、标准查询运算符—Join
原函数:
//
// 摘要:
// 基于匹配键对两个序列的元素进行关联。 使用默认的相等比较器对键进行比较。
//
// 参数:
// outer:
// 要联接的第一个序列。
//
// inner:
// 要与第一个序列联接的序列。
//
// outerKeySelector:
// 用于从第一个序列的每个元素提取联接键的函数。
//
// innerKeySelector:
// 用于从第二个序列的每个元素提取联接键的函数。
//
// resultSelector:
// 用于从两个匹配元素创建结果元素的函数。
//
// 类型参数:
// TOuter:
// 第一个序列中的元素的类型。
//
// TInner:
// 第二个序列中的元素的类型。
//
// TKey:
// 键选择器函数返回的键的类型。
//
// TResult:
// 结果元素的类型。
//
// 返回结果:
// 一个具有 TResult 类型元素的 System.Collections.Generic.IEnumerable<T>,这些元素是通过对两个序列执行内部联接得来的。
//
// 异常:
// System.ArgumentNullException:
// outer 或 inner 或 outerKeySelector 或 innerKeySelector 或 resultSelector 为 null。
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);
Note:这是一个泛型的扩展方法。outerKeySelector,innerKeySelector这两个参数是两个集合需要比较的键。resultSelector相当于前面的Selcet,后面可以接一个匿名对象。
示例:
使用到前面的Student,Product类,运行结果和前面一样。
private void button1_Click_1(object sender, EventArgs e)
{
//初始化Student数组
Student[] arrStu = new Student[]{
new Student{ID=,SName="zhangsan",Age=},
new Student{ID=,SName="lisi",Age=},
new Student{ID=,SName="wangwu",Age=},
new Student{ID=,SName="liuliu",Age=},
};
//初始化Product数组
Product[] arrPro = new Product[]{
new Product{ID=,PName="Apple",Price=2.25},
new Product{ID=,PName="Orange",Price=5.25},
new Product{ID=,PName="Banana",Price=7.5},
new Product{ID=,PName="StrawBerry",Price=6.5},
};
//标准查询运算符
var query = arrStu.Join(arrPro, s => s.ID, p => p.ID, (s, p) =>new { s.SName, s.Age, p.PName, p.Price });
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());
}
LINQ学习——JOIN的更多相关文章
- linq group join
本篇介绍Linq的Group和Join操作,继续使用<Linq 学习(3) 语法结构>中介绍的数据源. GroupGroup是进行分组操作,同SQL中的Group By类似.原型如下: p ...
- (转)Linq学习笔记
写在前面 最近在看Linq,在博客园看到这篇文章,写的通俗易懂,转来和大家一起做个分享.原文地址http://www.cnblogs.com/goscan/archive/2011/05/05/Lin ...
- C#之Linq学习笔记【转】
写在前面 其实在09年就已经学习过Linq了,并被她那优美的语法所吸引,只是现在所在的公司还在使用VS2005在.Net2.0的框架下面的开发,所以Linq也很久没有用过了,最近看部门的同事对这个有些 ...
- Linq学习以及简单用法
Linq学习 Linq(language Intergrated Query)即语言集成查询 LINQ是一组语言特性和API,使得你可以使用统一的方式编写各种查询.用于保存和检索来自不同数据源的数据, ...
- Linq学习工具及Lamada表达式
好东西.转载一个.以备学习 Linq学习工具: http://www.linqpad.net/ Lamada表达式: Func<int, int, int> IntPow = (x ...
- linq学习
最全的linq学习文章: http://www.cnblogs.com/heyuquan/p/Linq-to-Objects.html
- Linq中join & group join & left join 的用法
Linq中join & group join & left join 的用法 2013-01-30 11:12 12154人阅读 评论(0) 收藏 举报 分类: C#(14) 文章 ...
- LINQ to XML LINQ学习第一篇
LINQ to XML LINQ学习第一篇 1.LINQ to XML类 以下的代码演示了如何使用LINQ to XML来快速创建一个xml: public static void CreateDoc ...
- LINQ学习系列-----1.3 扩展方法
这篇内容继续接着昨天的Lambda表达式的源码继续下去.昨天讲了Lambda表达式,此篇讲扩展方法,这两点都是Linq带来的新特性. 一.扩展方法介绍 废话不多说,先上源码截图: 上图中Ge ...
随机推荐
- MyBatis拦截器自定义分页插件实现
MyBaits是一个开源的优秀的持久层框架,SQL语句与代码分离,面向配置的编程,良好支持复杂数据映射,动态SQL;MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyB ...
- 查询SQL SERVER 数据库版本号脚本语句
数据库直接执行此语句即可select @@version 示例: Microsoft SQL Server 2014 - 12.0.2000.8 (X64) Feb 20 2014 20:04:2 ...
- .NET Core 微信公众号小程序6种获取UnionID方法,你知道哪几种?
前言 获取UnionID是开发微信公众号/小程序中很有必要的一个环节,特别是针对一个公司拥有多个公众号小程序而推出的机制,实现打通账户一体化,用UnionID来区分多平台的唯一性. 官方的解释:如果开 ...
- 本人亲测-百度富文本编辑器(无bug版本)
再此我想说明一点,好多教程都是转载别人的,而且也不注明从哪里转载的.每次搜点资料的时候总是跟网上刷小视频的感觉一样.有些人就直接把别人的东西粘贴过来了,一点改动都没有. 废话不多说,直接上教程. (百 ...
- Be a Winner 当成功者
Winners see opportunities. Losers see. Winners see possibilities. Losers see problems. Winners see t ...
- Unreal Engine 4 系列教程 Part 4:UI教程
.katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...
- DP题 总结 [更新中]
建设中 ... 预防针 : 本蒟蒻代码风格清奇(⊙﹏⊙)b 一.选学霸 题目描述 老师想从N名学生中选M人当学霸,但有K对人实力相当,如果实力相当的人中,一部分被选上,另一部分没有,同学们就会抗议.所 ...
- python学习-并发编程(十四)
14.2线程的创建与启动 import threading # 定义一个普通的action函数,该函数准备作为线程执行体 def action(max): for i in range(max): p ...
- linux上安装newman
1. newman的安装依赖nodejs,首先安装node/npm 进入到 /usr/local目录[root@ipha-dev71- local]# cd /usr/local [root@ipha ...
- 玩转OneNET物联网平台之MQTT服务④ —— 远程控制LED(设备自注册)+ Android App控制
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...