当前位置: 首页 > news >正文

Linq中使用Left Join

准备一些测试数据,如下:

 

复制代码
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
};
复制代码

 

 

参考资料: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

转载于:https://www.cnblogs.com/zcm123/archive/2013/06/05/3118634.html

相关文章:

  • jdbc封装
  • Eclipse不能重新编译 java文件
  • SAP HANA中导入文件时的时间格式问题
  • LoadRunner结果分析笔记
  • Fedora 16 安装 Mp3和视频播放器
  • Windows黑客基础(2):获取其他进程的HANDLE
  • EOF 后面的空格
  • ACM半路失踪~我去找WEB了
  • 升级CentOS5.6_X64 python2.4.3到2.7
  • php 数据库连接类
  • C++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容...
  • NAT后面的FTP SERVER终极篇
  • 2(4).选择排序_快排(双向循环链表)
  • 多线程BackgroundWorker
  • Deep Learning(3)算法简介
  • 「译」Node.js Streams 基础
  • echarts花样作死的坑
  • es6要点
  • Go 语言编译器的 //go: 详解
  • iOS 颜色设置看我就够了
  • iOS编译提示和导航提示
  • JavaScript新鲜事·第5期
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • learning koa2.x
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • quasar-framework cnodejs社区
  • Spring Boot快速入门(一):Hello Spring Boot
  • vue-loader 源码解析系列之 selector
  • 后端_MYSQL
  • 驱动程序原理
  • 深入 Nginx 之配置篇
  • 手写双向链表LinkedList的几个常用功能
  • Python 之网络式编程
  • 阿里云ACE认证学习知识点梳理
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • 组复制官方翻译九、Group Replication Technical Details
  • "无招胜有招"nbsp;史上最全的互…
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • $ git push -u origin master 推送到远程库出错
  • (2)(2.10) LTM telemetry
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .net 受管制代码
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .NET的微型Web框架 Nancy
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • ::什么意思
  • :如何用SQL脚本保存存储过程返回的结果集
  • @EnableAsync和@Async开始异步任务支持
  • @Service注解让spring找到你的Service bean