Linq Left Join;linq左连接 (转载)
来源 https://www.cnblogs.com/xinjian/archive/2010/11/17/1879959.html
准备一些测试数据,如下:
- use Test
- Create table Student(
- ID int identity(1,1) primary key,
- [Name] nvarchar(50) not null
- )
- Create Table Book(
- ID int identity(1,1) primary key,
- [Name] nvarchar(50)not null,
- StudentID int not null
- )
- insert into Student values('张三')
- insert into Student values('李四')
- insert into Student values('王五')
- select * from student
- --张三借的书
- insert into Book values('红楼',1)
- insert into Book values('大话红楼',1)
- --李四借的书
- insert into Book values('三国',2)
- --王五没借书
- --一本错误的记录
- insert into Book values('错误时怎样练成的',111)
- --左连接
- select s.name,b.name from student as s
- left join Book as b on s.id=b.studentid
- --右连接
- select s.name,b.name from student as s
- right join Book as b on s.id=b.studentid
要用Linq实现左连接,写法如下
- DataClasses1DataContext db = new DataClasses1DataContext();
- var leftJoinSql = from student in db.Student
- join book in db.Book on student.ID equals book.StudentID into temp
- from tt in temp.DefaultIfEmpty()
- select new
- {
- sname= student.Name,
- bname = tt==null?"":tt.Name//这里主要第二个集合有可能为空。需要判断
- };
用Linq实现右连接,写法如下
- DataClasses1DataContext db=new DataClasses1DataContext();
- var rightJoinSql = from book in db.Book
- join stu in db.Student on book.StudentID equals stu.ID into joinTemp
- from tmp in joinTemp.DefaultIfEmpty()
- select new {
- sname=tmp==null?"":tmp.Name,
- bname=book.Name
- };
三表左连接
匿名类
- var list = (
- from u in dc.userinfos
- join j in dc.jobs on u.job equals j.jid into j_join
- from x in j_join.DefaultIfEmpty()
- join c in dc.cities on u.city equals c.cid into c_join
- from v in c_join.DefaultIfEmpty()
- select new
- {
- id = u.id,
- name = u.name,
- jname = x.jname,
- cname = v.cname,
- /*u1=u,x1=x,v1=v*/
- //不要用对象的方式 因为对象可能为null那么对象.属性就会抛异常
- }
- ).ToList();
- for (var i = ; i < list.Count(); i++)
- {
- Console.WriteLine(list[i].name + '\t' + list[i].jname + '\t' + list[i].cname); //字段为null不报异常
- //Console.WriteLine(list[i].u1.name+'\t'+list[i].x1.jname+'\t'+list[i].v1.cname+"\r\n"); //对象x1 v1 有可能为null 抛异常
- }
- Console.ReadLine();
模型类
linq join 左连接 leftjoin 多个on条件 where 条件
- var haveChange = from newScore in newScoreList
- join oldScore in oldScoreList
- on
- new{newScore.ExamId,newScore.StudentId,newScore.Subject,newScore.ClassId} equals
- new{oldScore.ExamId,oldScore.StudentId,oldScore.Subject,oldScore.ClassId}
- where newScore.Score != oldScore.Score
- select newScore;

- var query= from cc in COPTC
- join cd in COPTD
- on new {cc.TC001,cc.TC002} equals new{ cd.TD001,cd.TD002}
- into m
- from n in m.DefaultIfEmpty()
- join ma in MOCTA
- on new{cd.TD001, cd.TD002,cd.TD003 } equals new{ ma.TA026,ma.TA027,ma.TA028}
- where new char[]{'Y','y'}.Contains(ma.TA013)
- && new char[]{'Y','y'}.Contains(cc.TC027)
- && Convert.ToDateTime(ma.TA003) > Convert.ToDateTime("2010-07-20")
- && Convert.ToDateTime(ma.TA003) < Convert.ToDateTime("2010-12-31")
- select new
- {
- cc,
- cd
- };

参考资料:
https://www.cnblogs.com/weixing/p/4447927.html
https://www.cnblogs.com/joeylee/p/3711654.html
http://developer.51cto.com/art/200909/152189.htm
http://hi.baidu.com/thinsoft/blog/item/83fb1e9089cc7186a877a4b1.html
http://apps.hi.baidu.com/share/detail/12540006
http://www.winu.cn/space-14160-do-blog-id-25172.html
Linq Left Join;linq左连接 (转载)的更多相关文章
- Linq 和 SQL的左连接、右连接、内链接
在我们工作中表连接是很常用的,但常用的有这三种连接方式:左连接.右连接.内链接 在本章节中讲的是1.如何在Linq中使用左连接,右连接,内连接. 2.三种连接之间的特点在哪? 3.Linq的三种连接语 ...
- sql语句中的join连接(左连接、右连接、全连接、内连接)
内部连接(inner join): select * from d_user a inner join D_ORGANIZATION b on a.COMPANY_XID=b.ID 内部链接也是排他 ...
- sql左连接,右连接,内连接
1.sql查询时什么叫左连接和右连接 左连接和右连接都是外部连接,也就是区别于内部连接,它对不满足连接条件的行并不是象内部连接一样将数据完全过滤掉,而是保留一部分数据,行数不会减少. 左或 ...
- 【MySQL】MySQL内连接,左连接,右连接查询
概念 INNER JOIN(内连接):获取两个表中字段匹配关系的记录.也就是只会返回共有的内容. LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录. RIGHT JOIN(右 ...
- EF Linq中的左连接Left Join查询
linq中的join是inner join内连接,就是当两个表中有一个表对应的数据没有的时候那个关联就不成立. 比如表A B的数据如下 from a in A join b in B on a.BId ...
- Linq 左连接 left join
Suppose you have a tblRoom and tblUserInfo. Now, you need to select all the rooms regardless of whet ...
- LINQ的左连接、右连接、内连接和Lamda表达式实现Left join
1.左连接: var LeftJoin = from t1 in l1join t2 in l2on t1.ID equals t2.ID into Joinedt12from t3 in Joine ...
- Linq连接查询之左连接、右连接、内连接、全连接、交叉连接、Union合并、Concat连接、Intersect相交、Except与非查询
内连接查询 内连接与SqL中inner join一样,即找出两个序列的交集 Model1Container model = new Model1Container(); //内连接 var query ...
- Linq实现左连接、右连接
--一本错误的记录 insert into Book values('错误时怎样练成的',111) --左连接 select s.name,b.name from student as s lef ...
随机推荐
- 【转载】 os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" os.environ["CUDA_VISIBLE_DEVICES"] = "0" (---------tensorflow中设置GPU可见顺序和选取)
原文地址: https://blog.csdn.net/Jamesjjjjj/article/details/83414680 ------------------------------------ ...
- SpringBoot处理异常方式
SpringBoot提供了多种处理异常方式,以下为常用的几种 1. 自定义错误异常页面 SpringBoot默认的处理异常的机制:SpringBoot默认的已经提供了一套处理异常的机制.一旦程序中出现 ...
- 转载: 我如何使用 Django + Vue.js 快速构建项目
原文链接: https://www.ctolib.com/topics-109796.html 正文引用如下 引言 大U的技术课堂 的新年第一课,祝大家新的一年好好学习,天天向上:) 本篇将手把手教你 ...
- [Windows] - 在 Windows Server 2019 找不到无线网卡 之解决
硬件:Intel® Dual Band Wireless-AC 3165系统:Windows Server 2019 问题:新系统安装完成后,无法找到无线网卡 尝试:适用于 Windows Serve ...
- XML中的XPATH和DTD
大家好,乐字节小乐又来了,上次给大家说道的是XML解析,这次接着讲述XML文档中的语言:XPATH.DTD 一.先来说说XPATH 1.XPATH 概念 XPath 是一门在 XML 文档中查找信息的 ...
- CORS解决跨域问题(403问题)
1.什么是跨域问题? 跨域问题是浏览器对于ajax请求的一种安全限制:一个页面发起的ajax请求,只能是用当前页同域名同端口的路径,这能有效的阻止跨站攻击. 2.跨域问题出现的条件: 1.跨域问题是a ...
- 在Vcl和FireMonkey应用程序中启用TXMLDocument 的XPath(selectNode,selectNodes)方法
该TXMLDocument的类让你来操作VCL和FireMonkey应用程序的XML文件,但这个类没有实现直接的方式来调用XPath的相关方法(selectNode,的selectNodes),所以你 ...
- 读文件时出现这个错误 'utf-8' codec can't decode byte 0xba in position 21: invalid start byte
''' file2 文件内容: 很任性wheniwasyoung ''' 源代码: f = open("file2",'r',encoding="utf-8") ...
- 解决kali安装成功后没有声音的问题
Kali Linux系统默认状态下,root用户是无法使用声卡的,也就没有声音.启用的方法如下: (1)在终端执行命令:systemctl --user enable pulseaudio (2)在/ ...
- HTML5 极简的JS函数
页面初始化 mui框架将很多功能配置都集中在mui.init方法中,要使用某项功能,只需要在mui.init方法中完成对应参数配置即可,目前支持在mui.init方法中配置的功能包括:创建子页面.关闭 ...