左连右连还是内连这个其实你不需要关心。只需要根据实体的映射关系写查询,框架会自动帮你生成的。 至于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 左连接 右连接 以及内连接写法的区别的更多相关文章

  1. my sql 下左连接 右链接、内连接等应用,INNER JOIN LEFT JOIN RIGHT JOIN

    1.数据准备 建两个表格: create table student (idstu int, namestu ) ); ,"张三")(,"李四"),(,&quo ...

  2. SQLServer学习笔记<> 表连接查询----交叉连接、内连接、左连接、右连接

    (1)交叉连接(cross join)即我们所说的笛卡尔积.查询出满足两张表所有的记录数,A(3条记录),B(9条记录),A*B(27条记录). 比如:雇员表(HR.employees)和货运公司(S ...

  3. 数据库左连接left join、右连接right join、内连接inner join on 及 where条件查询的区别

    join on 与 where 条件的执行先后顺序: join on 条件先执行,where条件后执行:join on的条件在连接表时过滤,而where则是在生成中间表后对临时表过滤 left joi ...

  4. SQL Server中的连接查询【内连接,左连接,右连接,。。。】

    在查询多个表时,我们经常会用“连接查询”.连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志. 什么是连接查询呢? 概念:根据两个表或多个表的列之间的关系,从这些表中查询数据 ...

  5. Oracle左连接,右连接

    Oracle左连接,右连接 数据表的连接有: 1.内连接(自然连接): 只有两个表相匹配的行才能在结果集中出现 2.外连接: 包括 (1)左外连接(左边的表不加限制) (2)右外连接(右边的表不加限制 ...

  6. SQL左连接右连接

    假设有A,B两个表.     表A记录如下:   aID     aNum   1     a20050111   2     a20050112   3     a20050113   4      ...

  7. Sql中的内连接,左连接以及右连接区别

    转自:http://pangaoyuan.javaeye.com/blog/713177 有两个表A和表B. 表A结构如下: Aid:int:标识种子,主键,自增ID Aname:varchar 数据 ...

  8. core的 Linq基本使用,简单模拟数据库多表的左右内连接的测试

    1:先看效果: 2:部分代码截图 3:全部代码 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 n ...

  9. 深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接(转)

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

随机推荐

  1. 毛玻璃CHBlurEffect

    1.将需要加入毛玻璃的UI控件传入接口即可 1.1 .h文件 // // 文 件 名:CHBlurEffect.h // // 版权所有:Copyright © 2018年 leLight. All ...

  2. Harbor安装 -- 企业级Registry仓库

    (一)Harbor安装 -- 企业级Registry仓库 以下文章转自http://www.jianshu.com/p/2ebadd9a323d 根据Harbor官方描述: Harbor是一个用于存储 ...

  3. 深入浅出git

    图文 http://www.cnblogs.com/syp172654682/p/7689328.html 廖雪峰 https://www.liaoxuefeng.com/wiki/001373951 ...

  4. echarts设置地图大小比例,大小设置

    设置地图大小可通过以下属性设置: geo.aspectScale number [ default: 0.75 ] 这个参数用于 scale 地图的长宽比. 最终的 aspect 的计算方式是:geo ...

  5. [SinGuLaRiTy] NOIP膜你赛-Day 1

    [SinGuLRiTy-1022] Copyright (c) SinGuLaRITy 2017. All Rights Reserved.  对于所有题目:Time Limit:1s || Memo ...

  6. es数据增删改查

    设置最大查询条数 curl -XPUT 'http://10.121.8.5:9200/zdl_mx_shzt_ztdf/_settings' -d'{"index":{" ...

  7. GuavaCache简介(一)

    原文地址 http://blog.csdn.net/guozebo/article/details/51590517 前言 在多线程高并发场景中往往是离不开cache的,需要根据不同的应用场景来需要选 ...

  8. Vue中添加过渡效果

    最近在学习Vue这个框架,发现新的版本中,官网的文档里面说的过渡效果,如果直接粘贴官方的例子中的代码,发现并没有过渡的效果,经过反复测试之后终于知道怎么搞了,把测试的过程总结一下,以便以后回顾. 贴上 ...

  9. 解决maven项目中有小红叉的问题

    首先在window--perferences--showview中显示problems中查看出错的原因

  10. LUNA16数据集(二)肺结节可视化

    在检测到肺结节后,还需要可视化,这样才能为诊断服务. 我使用的项目地址为:https://github.com/wentaozhu/DeepLung 项目基于论文:DeepLung: Deep 3D ...