左连右连还是内连这个其实你不需要关心。只需要根据实体的映射关系写查询,框架会自动帮你生成的。 至于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. 使用Privoxy转化SSH到HTTP代理

    为什么要进行转换? 一般我们很容易找到通过SOCKS5代理的方法,如SSH,但是很多浏览器或是软件只支持HTTP方式,所以就需要将我们的SSH代理模式转为HTTP代理方式  如何转换? 使用Privo ...

  2. 浅谈chainer框架

    一 chainer基础 Chainer是一个专门为高效研究和开发深度学习算法而设计的开源框架. 这篇博文会通过一些例子简要地介绍一下Chainer,同时把它与其他一些框架做比较,比如Caffe.The ...

  3. Q的进阶用法

    Q的实例化用法 #q1 里面的条件都是or的关系 q1=Q() q1.connector = 'OR' q1.children.append(('id',1)) q1.children.append( ...

  4. 使用RestTemplate时报错java.lang.IllegalStateException: No instances available for 127.0.0.1

    我在RestTemplate的配置类里使用了 @LoadBalanced@Componentpublic class RestTemplateConfig { @Bean @LoadBalanced ...

  5. CuteFTP文件列表按名称排序,有中文文件名时,软件死掉的解决办法

    看到很多人的解决办法是切换到一个没有中文的文件夹,点击排序后,再切换回来,这个的确是可以解决问题,但是有些繁琐! 直接一步到位的解决办法是: 依次点击菜单:工具->全局选项->导航-> ...

  6. adminLte 解决菜单栏 bug

    <ul class="sidebar-menu" data-widget="tree">    功能菜单 点击 不隐藏第三级 子菜单....在 ad ...

  7. [TJOI2017]DNA (FFT)

    [Luogu3763] FFT做字符串匹配即可,详见代码 // luogu-judger-enable-o2 #include<cstdio> #include<cstring> ...

  8. AngularJS页面【uib-dropdown】控件在模态窗口(弹出窗)中无法使用问题

    如果你的下拉框中有属性 dropdown-append-to-body 将它去掉,即可正常使用该插件. <div class="btn-group dropdown" uib ...

  9. django中关于静态文件的引入(这边是指边主要是jquery和bootstrap

    一.  创建文件夹 首先在项目的根目录中新建一个文件夹,这个文件夹的名称最好以static命名 二.   修改配置 在项目的settings文件中,拉倒最下面,可以看到 STATICFILES_DIR ...

  10. 8.Spring对JDBC的支持和事务

    1.Spring对JDBC的支持 DAO : Spring中对数据访问对象(DAO)的支持旨在简化Spring与数据访问技术的操作,使JDBC.Hibernate.JPA和JDO等采用统一的方式访问 ...