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 ...
随机推荐
- python编程基础之二十八
装饰器:说白了就是闭包,但是内部函数调用外部变量调用的是函数, 好处:就是在不用修改原函数代码的前提下给函数增加新的功能 装饰器有两种写法 第一种: #被修饰的函数 def say_hello(nam ...
- spring Bean的三种配置方式
Spring Bean有三种配置方式: 传统的XML配置方式 基于注解的配置 基于类的Java Config 添加spring的maven repository <dependency> ...
- 模块的 __name__
模块的 __name__ 每个模块都有一个名称,而模块中的语句可以找到它们所处的模块的名称.这对于确定模块是独立运行的还是被导入进来运行的这一特定目的来说大为有用.正如先前所提到的,当模块第一次被导入 ...
- Flask中的渲染变量
Flask中的渲染变量 一.渲染变量 <!DOCTYPE html> <html lang="en"> <head> <meta char ...
- Windows渗透测试中wmi的利用
0x01 关于WMI WMI可以描述为一组管理Windows系统的方法和功能.我们可以把它当作API来与Windows系统进行相互交流.WMI在渗透测试中的价值在于它不需要下载和安装, 因为WMI是W ...
- My Idea About ID wly_sh (关于用户名 wly_sh 的猜想)
I Wanna Say Is That- There's a guy called wsh in our computer room. That guy registered a blog in CS ...
- Math中ceil中为什么会有负零
double c=Math.ceil(-0.5); double d=Math.floor(0.5); System.out.println(c); System.out.println(d); Sy ...
- 虚拟机Ubuntu系统无法连接网络解决方案
宿主机连接wifi,虚拟机无法联网 查看是否有网络图标 操作一: sudo service network-manager stopsudo rm /var/lib/NetworkManager/Ne ...
- c++异常处理的方法
c++异常处理 程序运行时常会碰到一些异常情况,例如:做除法的时候除数为 0:用户输入年龄时输入了一个负数:用 new 运算符动态分配空间时,空间不够导致无法分配:访问数组元素时,下标越界:打开文件读 ...
- 解决git报错“The file will have its original line endings in your working directory”的方法
在执行命令 git commit --all -m '说明' 时报错“The file will have its original line endings in your working dir ...