使用的数据源类型:

 static public class SampleData{static public Publisher[] Publishers ={new Publisher {Name="FunBooks"},new Publisher {Name="Joe Publishing"},new Publisher {Name="I Publisher"}};static public Author[] Authors ={new Author {FirstName="Johnny", LastName="Good"},new Author {FirstName="Graziella", LastName="Simplegame"},new Author {FirstName="Octavio", LastName="Prince"},new Author {FirstName="Jeremy", LastName="Legrand"}};static public Subject[] Subjects ={new Subject {Name="Software development"},new Subject {Name="Novel"},new Subject {Name="Science fiction"}};static public Book[] Books ={new Book {Title="Funny Stories",Publisher=Publishers[0],Authors=new[]{Authors[0], Authors[1]},PageCount=101,Price=25.55M,PublicationDate=new DateTime(2004, 11, 10),Isbn="0-000-77777-2",Subject=Subjects[0]},new Book {Title="LINQ rules",Publisher=Publishers[1],Authors=new[]{Authors[2]},PageCount=300,Price=12M,PublicationDate=new DateTime(2007, 9, 2),Isbn="0-111-77777-2",Subject=Subjects[0]},new Book {Title="C# on Rails",Publisher=Publishers[1],Authors=new[]{Authors[2]},PageCount=256,Price=35.5M,PublicationDate=new DateTime(2007, 4, 1),Isbn="0-222-77777-2",Subject=Subjects[0]},new Book {Title="All your base are belong to us",Publisher=Publishers[1],Authors=new[]{Authors[3]},PageCount=1205,Price=35.5M,PublicationDate=new DateTime(2006, 5, 5),Isbn="0-333-77777-2",Subject=Subjects[2]},new Book {Title="Bonjour mon Amour",Publisher=Publishers[0],Authors=new[]{Authors[1], Authors[0]},PageCount=50,Price=29M,PublicationDate=new DateTime(1973, 2, 18),Isbn="2-444-77777-2",Subject=Subjects[1]}};}

1、组连接

组连接是与分组查询是一样的。即根据分组得到结果。 如下例,根据publisther分组得到结果。

使用组连接的查询语句如下:

    GridViewGroupJoin.DataSource =from publisher in SampleData.Publishersjoin book in SampleData.Books on publisher equals book.Publisher into publisherBooksselect new { Publisher=publisher.Name, Books=publisherBooks };GridViewGroupJoin.DataBind();

上述代码就是所谓的“组连接”。它将每个出版社的图书分组为PublisherBooks,并绑定到了一起。这段代码与下面代码运行结果一致。

    var x = from book in SampleData.Booksgroup book by book.Publisherinto bookPublishersselect new { Publisher = bookPublishers.Key.Name, books = bookPublishers };

2、内连接

内连接与SqL中inner join一样,即找出两个序列的交集。如下例找出book中的Publisher存在于SampleData.Publishers的资料。

内连接查询语句如下:

GridViewInnerJoin.DataSource =from publisher in SampleData.Publishersjoin book in SampleData.Books on publisher equals book.Publisherselect new { Publisher=publisher.Name, Book=book.Title };
GridViewInnerJoin.DataBind();

内连接旨在找到两个序列的交集。经过内连接操作之后,满足指定条件且分别来自两个序列中的元素将被组合到一起,形成一个新的序列。Join操作符将基于元素中的Key的匹配情况,实现内连接。

3、左外连接

在内连接中,只有在两个待连接序列中均符合条件的组合才会出现在结果序列中。不过若是需要保留外部序列中的所有元素,而不管其是否有与之对应的、符合条件的内部序列元素存在,那么我们则要执行 左外连接  操作。

GridViewLeftOuterJoin.DataSource =from publisher in SampleData.Publishersjoin book in SampleData.Books on publisher equals book.Publisher into publisherBooksfrom book in publisherBooks.DefaultIfEmpty()select new {Publisher = publisher.Name,Book = book == default(Book) ? "(no books)" : book.Title};
GridViewLeftOuterJoin.DataBind();

DefaultIfEmpty()能够为空序列提供一个默认的元素。DefaultIfEmpty使用到了泛型的default关键词,对于引用类型将返回null,而对于值类型将返回0。对于结构体类型,则会根据其成员类型将他们对应的初始化为null或者0.

4、交叉连接

交叉连接将计算出两个序列中所有元素的笛卡尔积。结果序列将由一个序列中的每个元素和另一个序列中的每个元素的完全组合构成。结果序列中的元素的个数为两个源序列中的元素个数的积。

LINQ中的交叉连接并不是通过Join操作符实现的。在linq的术语中,交叉连接是指一类投影操作,可以通过SelectMany操作符或在查询表达式中使用多个from子句来实现。

GridViewCrossJoin.DataSource =from publisher in SampleData.Publishersfrom book in SampleData.Booksselect new {Correct = publisher == book.Publisher,Publisher = publisher.Name,Book = book.Title};
GridViewCrossJoin.DataBind();

SelectMany操作符方式:

SampleData.Publishers.SelectMany(publisher => SampleData.Books.Select(book => new{PublisherName = publisher.Name,BookName = book.Title}));

LINQ IN ACTION读书笔记.

转载于:https://www.cnblogs.com/dupeng0811/archive/2012/03/15/2397970.html

LINQ IN ACTION读书笔记:LINQ 使用连接 1、组连接 2、内连接 3、左外连接 4、交叉连接 使用和区别...相关推荐

  1. MySQL 学习笔记(15)— 连接查询(内连接、左外连接、右外连接、全外连接、交叉连接、自然连接等)

    本文参考:https://gitbook.cn/gitchat/column/undefined/topic/5db92b68a9c3a53bc3800eff SQL 支持的连接查询包括内连接.外连接 ...

  2. mysql外连接插座_深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接...

    1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接. 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 students和 ...

  3. 左外连接Left-Outer-Join的基于SQL,MapReduce,sparkRDD,sparkDataFrame以及spark SQL的实现案例及对比

    提示:阅读本文需要部分java,scala,spark,sql的基础. 文章目录 前言 一.什么是join操作? 二.有那些常见的join的类型? 三.使用SQL实现左外连接: 1.数据准备 2.实现 ...

  4. mysql 左外连接原理_深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接...

    1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接. 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 students和 ...

  5. oracle左外连接语法,Oracle 左外连接、右外连接、全外连接小总结

    Oracle 左外连接.右外连接.全外连接小总结: 1.左外连接: left outer join 或者 left join 左外连接就是在等值连接的基础上加上主表中的未匹配数据,例: SELECT ...

  6. 数据库——自然连接、内连接、外连接(左外连接、右外连接、全外连接)、交叉连接

    1. 自然连接(*natural join)* 自然连接不用指定连接列,也不能使用ON语句,它默认比较两张表里相同的列, `SELECT*FROM student NATURAL JOIN score ...

  7. Machine Learning in Action 读书笔记---第5章 Logistic回归

    Machine Learning in Action 读书笔记 第5章 Logistic回归 文章目录 Machine Learning in Action 读书笔记 一.Logistic回归 1.L ...

  8. Machine Learning in Action 读书笔记---第3章 决策树

    Machine Learning in Action 读书笔记 第3章 决策树 文章目录 Machine Learning in Action 读书笔记 一.决策树算法简介 1 决策树的构造 2 决策 ...

  9. Machine Learning in Action 读书笔记---第4章 基于概率论的分类方法:朴素贝叶斯

    Machine Learning in Action 读书笔记 第4章 基于概率论的分类方法:朴素贝叶斯 文章目录 Machine Learning in Action 读书笔记 一.基于贝叶斯决策理 ...

最新文章

  1. arcpy实现空间查询_布隆过滤!Python实现亿级数据集中元素快速查找
  2. 我的年龄又快被5整除了......
  3. Docker(一):Docker的安装与常用命令
  4. nb-iot模块的at指令_esp-07s模块规格-
  5. SAP Hybris Accelerator的安装和使用方式
  6. 洛谷 P1736 创意吃鱼法(多维DP)
  7. linux vector 头文件,LINUX 之Vector用法
  8. android Activity 之间传递复杂对象
  9. java去掉图片边框颜色_sharp 去除图片边框
  10. union的限制, 临时表大小的优化
  11. 英语发音规则---C字母
  12. Flutter实战一Flutter聊天应用(一)
  13. OpenCV-美食—鲜美滤镜
  14. 长话无需短说 讯飞输入法超长语音输入不限时
  15. VB.NET的数据库基础编程[zz]
  16. WPS如何删除空白页
  17. 简述力法计算弹性固定无铰拱的原理_力法读书笔记
  18. 战火与秩序迁城显示服务器忙,战火与秩序怎么迁城 迁城方法和迁城技巧分享[图]...
  19. 高等数学Mathematica实验题——2.2 - 17.根号2的连分式展开(Expansion of square 2)
  20. 软构习题课一内容总结

热门文章

  1. 做老板的,首先要懂销售,销售什么?
  2. 家里的宽带是300兆,路由器也是换的千兆的,为何网络还是不好?
  3. Qt4_使用SAX读取XML
  4. Qt4_使用窗口部件
  5. SQL JOIN TABLES:在SQL Server中使用查询
  6. 端口渗透·网站渗透过程 --21 ,22,873,3306,6379,8080(8080端口是针对CMS的渗透)...
  7. uni - 使用npm
  8. freemarker和thymeleaf的使用样例
  9. java-DateFormat
  10. WebAPI基本封装