LINQ中的Join对应T-SQL中的内连接,并无左连接的方法,当然也没有右连接。

要达成Left join必须依靠GroupJoin来完成。

GroupJoin顾名思义就是先集团在做加入,加入的不同处在于加入会得到一个一对一的新物件集合(List <T>),而GroupJoin则会得到一对多的物件集合({key,List < T>})。

以下是join与GroupJoin的比较

资料表如图:ID = 004无可对应的资料

var _Join = SLIST.Join(ScoreList, o => o.ID, p => p.StudentID, (o, c) => new { o.Classroom, o.ID,o.Name, c.Class,c.score });
 

ID=004 不會在結果集合中

var _GroupJoin = SLIST.GroupJoin(ScoreList, o => o.ID, p => p.StudentID, (o, c) => new { o.Classroom, o.ID, c });
// C只能以泛型物件的方式存入,不能列举属性
 

物件Ç会比对关键值各自存入

可以看GroupJoin可以得到与Left Join相似的结果

接下来只要使用SelectMany将GroupJoin中的内容展开

//将矩阵展开并输出Null得到left join资料集

var _GroupJoinToLeftJoin = SLIST.GroupJoin(ScoreList, o => o.ID, p => p.StudentID, (o, c) => new { o.Classroom, o.ID,o.Name, c }).SelectMany(o => o.c.DefaultIfEmpty(), (o, c) => new { o.ID, o.Classroom,o.Name,Class=(c==null||c.Class==null?"N/A":c.Class), score= (c == null || c.score == null ? new Nullable<ushort>() : c.score) });
// SelectMany展开矩阵的内容
//使用DefaultIfEmpty因匿名型别无法输出NULL(无法转换成强型别),需特别注意Null的处理

输出结果

 

LINQ学习笔记 Join 与 Group join的更多相关文章

  1. Oracle学习笔记:a inner join b与from a,b where a.x=b.x的差异

    近期,在使用Oracle的过程中,由以下两段代码的执行引发的思考,到底 select * from a,b where a.id = b.id 和 select * from a inner join ...

  2. MYSQL学习笔记 (三)JOIN用法

    数据库的操作分开增删改查,其中查询操作基本占系统的90%,大家所说的优化SQL语句基本是优化查询语句.接下来将学习JOIN的用法,JOIN包括:INNER JOIN(内连接).LEFT JOIN(左外 ...

  3. linq学习笔记

    最近在学习linq的一些基础知识,看了c#高级编程及阅读了园子内部几篇优秀的博文,有所体会,感觉应该记录下来,作为以后复习使用.都是一些最基础的知识,大致分为三个部分:linq预备知识:linq查询: ...

  4. (转)Linq学习笔记

    写在前面 最近在看Linq,在博客园看到这篇文章,写的通俗易懂,转来和大家一起做个分享.原文地址http://www.cnblogs.com/goscan/archive/2011/05/05/Lin ...

  5. C#之Linq学习笔记【转】

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

  6. LINQ 学习笔记(1)

    学习资源参考 : http://www.cnblogs.com/lifepoem/archive/2011/12/16/2288017.html 常用方法是 Where, OrderBy, Selec ...

  7. Linq学习笔记(转)

    开始Linq前你要知道的 扩展方法 顾名思义就是对现有类进行扩展的的方法,扩展方法可以在不修改现有类的情况下,为现有类增加公共的接口(不是C#中的interface). 扩展方法本质上是一个静态方法, ...

  8. Linq 学习笔记

    简介: LINQ 提供一种统一的方式,让我们能在C#语言中直接查询和操作各种数据.​​ LINQ是用来描述数据访问总体方式的术语.LINQ to Object是针对实现了IEnumerable< ...

  9. C# LINQ学习笔记

    LINQ,语言集成查询: LINQ TO SQL,同EF,NHibernate一样,也是一种ORM框架: 1. 入门应用示例: static public void LinqBasic() { var ...

  10. LINQ学习笔记(二)

    上一篇是根据百度百科写的随便,同时也纠正我对LINQ的看法,因为首次接触LINQ是使用EF对数据库数据的操作. 所以误以为它操作数据库的一种新手段. LINQ语言集成查询是一组技术的名称,这些技术建立 ...

随机推荐

  1. How many '1's are there题解

    Description: Description: 第一行输入数字n(n<=50),表示有n组测试用例,第2到第n+1行每行输入数m(m为整数),统计并输出m用二进制表示时,1的个数. 例如:m ...

  2. 解决Unsupported major.minor version 51.0报错问题

    问题产生原因:计算机环境变量的jdk版本与eclipse使用的jdk版本不一致 解决方法: 1.查看计算机环境变量的jdk版本 2.查看eclipse项目java compiler的方法:在项目点右键 ...

  3. 修改本地dns域名对应的 ip

    C:\Windows\System32\drivers\etc 打开 hosts 文件 在浏览器 访问 http://a.com,就相当于访问 127.0.0.2 这个ip了

  4. Android学习总结(八)———— 广播的最佳实践(实现强制下线功能)

    一.基本概念 强制下线功能功能应该算是比较常见的了,很多应用程序都具备这个功能,比如你的QQ号或者微信号在别处登录了,就会将你强制挤下线.只需要在界面上弹出一个对话框,让用户无法进行任何其他的操作,必 ...

  5. SWTError: No more handles [gtk_init_check() failed] running platform tests (on Linux)

    http://www.lemmster.de/2013-12-19-swterror-no-more-handles-gtk_init_check-failed-running-platform-te ...

  6. VM中python2.7运行skier游戏,shell重启问题!!!!!!

    在虚拟机win7系统python2.7,在该python中运行了 父与子中的skier游戏(代码手写), 出现如下问题: ================ RESTART: C:\Python27\S ...

  7. Openjudge 1.13-23:区间内的真素数

    总时间限制:  1000ms 内存限制:  65536kB 描述 找出正整数 M 和 N 之间(N 不小于 M)的所有真素数. 真素数的定义:如果一个正整数 P 为素数,且其反序也为素数,那么 P 就 ...

  8. 当然,perl等脚本服务器是一般默认安装了,你入侵了一台主机,总不能先装配 Java 环境然后再开干吧?

    转自:https://www.zhihu.com/question/20173592 当然,perl等脚本服务器是一般默认安装了,你入侵了一台主机,总不能先装配 Java 环境然后再开干吧?

  9. 2019 opensuse linux Eclipse

    无法启动解决 eclipse.ini 尾部追加 --add-modules=ALL-SYSTEM /etc/hosts 追加 127.0.0.1 linux-xapw http://dl.google ...

  10. 使用Auto Layout中的VFL(Visual format language)--代码实现自动布局

    使用Auto Layout中的VFL(Visual format language)--代码实现自动布局 2014-12-09 10:56 编辑: zhiwupei 分类:iOS开发 来源:机智的新手 ...