linq to entity 左连接 右连接 以及内连接写法的区别
左连右连还是内连这个其实你不需要关心。只需要根据实体的映射关系写查询,框架会自动帮你生成的。 至于linq查询语法与扩展方法的效率,应该是一样的,比如:
var users=(from u in db.Users where u.UserRoleId==1 select u) .ToList();
var users2=db.Users.Where(u=>u.UserRoleId==1).ToList();
这两句查询实际上是等效的。
inner join:
var =from x in db.T1
join y in db.T2
on x.yId equals y.Id
select x;
left join:
var =from x in db.T1
join y in db.T2
on x.yId equals y.Id into temp
from y in temp.DefalutIfEmpty()
select new{x.Id,Name=y==null "":y.Name};
right join 原理同 left join
至于效率,lamda表达式同标准表达式
LINQ TO EF 用 from x in temp.DefalutIfEmpty() 不是百分百会执行左连接的
主要要看 关系的配置 以及数据库那边 是否为空 外键
linq中怎么实现多条件关联的左连接???
sql语句:
SELECT * FROM T_COURSE a left join T_USER_COURSE_RECORD tucr ON a.COURSE_ID=tucr.COURSE_ID
and tucr.[USER_ID]=@userId
userId是传入的参数
var data = from c in db.T_COURSE
join u in db.T_USER_COURSE_RECORD
on new { COURSE_ID=(long?)c.COURSE_ID, USER_ID=(long?)userId }
equals new { COURSE_ID=u.COURSE_ID,USER_ID=u.USER_ID }
into x
from cx in x.DefaultIfEmpty()
select new
{
c.COURSE_NAME,
cx.COURSE_ID,
USER_COURSE_ID = cx == null ? :cx.USER_COURSE_ID,
cx.USER_ID,
SCORE = (cx == null | cx.SCORE == -) ? "未完成" : cx.SCORE.ToString(),
};
return data;
特别是这句:
on new { COURSE_ID=(long?)c.COURSE_ID, USER_ID=(long?)userId }
equals new { COURSE_ID=u.COURSE_ID,USER_ID=u.USER_ID } 你应该确保组合键对应值的返回类型是一致的
long 对 long?就会产生错误
另外还可以这么写,更简便:
var data = from c in db.T_COURSE
join u in db.T_USER_COURSE_RECORD.Where(x=>x.USER_ID ==userId)
on c.COURSE_ID equals u.COURSE_ID into x
from cx in x.DefaultIfEmpty()
select new
{
c.COURSE_NAME,
COURSE_ID=cx,
USER_COURSE_ID=cx==null?:cx.USER_COURSE_ID,
USER_ID= cx,
SCORE =( cx==null|cx.SCORE == -) ? "未完成" : cx.SCORE.ToString()
};
http://blog.csdn.net/whw6263989/article/details/7877285
linq to entity 左连接 右连接 以及内连接写法的区别的更多相关文章
- my sql 下左连接 右链接、内连接等应用,INNER JOIN LEFT JOIN RIGHT JOIN
1.数据准备 建两个表格: create table student (idstu int, namestu ) ); ,"张三")(,"李四"),(,&quo ...
- SQLServer学习笔记<> 表连接查询----交叉连接、内连接、左连接、右连接
(1)交叉连接(cross join)即我们所说的笛卡尔积.查询出满足两张表所有的记录数,A(3条记录),B(9条记录),A*B(27条记录). 比如:雇员表(HR.employees)和货运公司(S ...
- 数据库左连接left join、右连接right join、内连接inner join on 及 where条件查询的区别
join on 与 where 条件的执行先后顺序: join on 条件先执行,where条件后执行:join on的条件在连接表时过滤,而where则是在生成中间表后对临时表过滤 left joi ...
- SQL Server中的连接查询【内连接,左连接,右连接,。。。】
在查询多个表时,我们经常会用“连接查询”.连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志. 什么是连接查询呢? 概念:根据两个表或多个表的列之间的关系,从这些表中查询数据 ...
- Oracle左连接,右连接
Oracle左连接,右连接 数据表的连接有: 1.内连接(自然连接): 只有两个表相匹配的行才能在结果集中出现 2.外连接: 包括 (1)左外连接(左边的表不加限制) (2)右外连接(右边的表不加限制 ...
- SQL左连接右连接
假设有A,B两个表. 表A记录如下: aID aNum 1 a20050111 2 a20050112 3 a20050113 4 ...
- Sql中的内连接,左连接以及右连接区别
转自:http://pangaoyuan.javaeye.com/blog/713177 有两个表A和表B. 表A结构如下: Aid:int:标识种子,主键,自增ID Aname:varchar 数据 ...
- core的 Linq基本使用,简单模拟数据库多表的左右内连接的测试
1:先看效果: 2:部分代码截图 3:全部代码 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 n ...
- 深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接(转)
1.内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符).包括相等联接和自然联接. 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 stude ...
随机推荐
- javascript table排序之jquery.tablesorter.js
table排序 jquery.tablesorter.js 一.Demo下载地址: 1.tablesorter.js下载地址: http://download.csdn.net/detail/zhan ...
- web安全-xss攻击
web安全问题 xss攻击 1.html标签 html内容的转义 escapeHtml str = str.replace(/&/g,'&'); str = str.replac ...
- selenium+Node.js在windows下的配置和安装
转载:http://www.jianshu.com/p/5e64bb70abb8
- Oracle数据稠化
姓名 学科 分数 城市 张三 ...
- 平衡树学习笔记(3)-------Splay
Splay 上一篇:平衡树学习笔记(2)-------Treap Splay是一个实用而且灵活性很强的平衡树 效率上也比较客观,但是一定要一次性写对 debug可能不是那么容易 Splay作为平衡树, ...
- 在docker容器中安装vim命令进行编辑文件
首先执行: 执行apt-get update, 然后再次执行apt-get install vim即可成功安装vim. 然后我们就可以使用vim编辑 如果不进行更新就会报错: 此时会报出bash: v ...
- Oracle 11G R2在用EXP 导出时,空表不能导出解决办法
11G中有个新特性,当表无数据时,不分配segment,以节省空间 解决方法: 1.insert一行,再rollback就产生segment了. 该方法是在在空表中插入数据,再删除,则产生segmen ...
- Es6中Map对象和Set对象的介绍及应用
map和set的方法,工作中有使用到,所以学习一下: Map 对象 Map 对象保存键值对.任何值(对象或者原始值) 都可以作为一个键或一个值. var myMap = new Map(); myMa ...
- rent bike问题(二分+贪心)
题目描述: A group of n schoolboys decided to ride bikes. As nobody of them has a bike, the boys need to ...
- 2016计蒜之道初赛第四场A
在每年的淘宝“双十一”时,访问量都会暴涨,服务器的请求会被流量分配程序按照一定策略,分发给不同的进程去处理.有一类请求,有两个进程可以接受分发的请求,其中一个进程所在服务器的配置.网络传输性能等都要优 ...