时间 2014-03-09 00:21:00  博客园-所有随笔区原文  http://www.cnblogs.com/nlh774/p/3588286.html

在EF中表连接常用的有Join()和Include(),两者都可以实现两张表的连接,但又有所不同。

例如有个唱片表Album(AlbumId,Name,CreateDate,GenreId),表中含外键GenreId连接流派表Genre(GenreId,Name)。每个唱片归属唯一一个流派,一个流派可以对应多个唱片。

1.Join(),两表不必含有外键关系,需要代码手动指定连接外键相等(具有可拓展性,除了值相等,还能指定是>,<以及其他对两表的相应键的关系),以及结果字段。

重载方式(是扩展方法,第一个参数带this,代表自身):

1.public static IQueryable<TResult> Join<TOuter, TInner, TKey, TResult>(this IQueryable<TOuter> outer, IEnumerable<TInner> inner, Expression<Func<TOuter, TKey>> outerKeySelector, Expression<Func<TInner, TKey>> innerKeySelector, Expression<Func<TOuter, TInner, TResult>> resultSelector); 2.public static IQueryable<TResult> Join<TOuter, TInner, TKey, TResult>(this IQueryable<TOuter> outer, IEnumerable<TInner> inner, Expression<Func<TOuter, TKey>> outerKeySelector, Expression<Func<TInner, TKey>> innerKeySelector, Expression<Func<TOuter, TInner, TResult>> resultSelector, IEqualityComparer<TKey> comparer);

那么可以这么写两个表的连接:

var wholeRecord = dc.Album.Join(dc.Genre, a => a.GenreId, g => g.GenreId, (a, g) => new { a.AlbumId,a.Name,g.GenreId,g.Name;

这样就选取除了两表的AlbumId,Name,GenreId,Name。

2.Include(),两表必须含有外键关系,只需要指定键名对应的类属性名即可,不需指定结果字段(即全部映射)。默认搜索某表时,不会顺带查询外键表,直到真正使用时才会再读取数据库查询;若是使用 Include(),则会在读取本表时把指定的外键表信息也读出来。

重载方式:

//位于namespace System.Data.Entity.Infrastructure
public DbQuery<TResult> Include(string path);
//位于namespace System.Data.Entity,务必引入才能找到该方法。否则只看到上个方法
public static IQueryable<T> Include<T, TProperty>(this IQueryable<T> source, Expression<Func<T, TProperty>> path) where T : class; public static IQueryable<T> Include<T>(this IQueryable<T> source, string path) where T : class;

可以这么写:

//EF已经生成了Album和Genre的数据库映射模型类以及导航属性
var wholeRecord=dc.Album.Include("Genre"); //或者 //var wholeRecord=dc.Album.Include(a=>Genre);

这样数据库就执行了一个左连接,把Album和Genre的所有字段全部连起来了,并且Include()是立即查询的,像ToList()一样,不会稍后延迟优化后再加载。

这样其实效率很低,因为如果两张表记录很大,那么连接是个费时费资源的事情,建议少用,或者先筛选出需要的结果集再连接。

EF的表连接方法Include() - nlh774相关推荐

  1. oracle 连接图示,ORACLE 表连接方法

    ORACLE 8i,9i 表连接方法. 一般的相等连接: select * from a, b where a.id = b.id; 这个就属于内连接. 对于外连接: Oracle中可以使用" ...

  2. oracle中笛卡尔积怎么用,Oracle的表连接方法(四)笛卡尔积

    Oracle表连接方法有四种: ● 排序合并连接(Sort Merge Join) ● 嵌套循环连接(Nested Loops Join) ● 哈希连接(Hash Join) ● 笛卡尔积(Carte ...

  3. SQL update 多表连接方法

    SQL Update多表联合更新的方法 (1) sqlite 多表更新方法 //---------------------------------- update t1 set col1=t2.col ...

  4. oracle的表几种连接比较,几种表连接方式的使用场景

    1)nested loop nested loop,指的是两个表连接时, 通过两层嵌套循环来进行依次的匹配, 最后得到返回结果集的表连接方法.select t1.owner,t1.object_nam ...

  5. Oracle优化之表连接方式

    Oracle优化之表连接方式 在Oracle数据库中,两个表之间的表连接方法有排序合并连接.嵌套循环连接.哈希连接和笛卡尔连接四种 1.排序合并连接(sort merge join) 排序合并连接是一 ...

  6. Oracle 优化器_表连接

    概述 在写SQL的时候,有时候涉及到的不仅只有一个表,这个时候,就需要表连接了.Oracle优化器处理SQL语句时,根据SQL语句,确定表的连接顺序(谁是驱动表,谁是被驱动表及 哪个表先和哪个表做链接 ...

  7. oracle强制执行计划,OBA技能2-Oracle执行计划顺序表连接

    小仙我在学习索引执行行为的时候,有个疑惑?那就是索引是找到一个值就马上回表,然后再找下一个值,再回表. 比如索引唯一扫描,索引范围扫描,索引全扫描,索引快速扫描.好像都是要回表.尤其是范围,不范围完后 ...

  8. oracle 表名拼接_Oracle之3种表连接方式(排序合并连接、嵌套循环、哈希连接)...

    排序合并连接 1.2.4.2.1  排序合并连接 排序合并连接(Sort Merge Join)是一种两个表在做表连接时用排序操作(Sort)和合并操作(Merge)来得到连接结果集的表连接方法. 如 ...

  9. JVM学习笔记之-运行时数据区概述及线程概述,程序计数器(PC寄存器),虚拟机栈(栈,局部变量表,操作数栈,动态连接,方法调用,方法返回地址等),本地方法接口,本地方法栈

    运行时数据区概述及线程概述 内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行.JVM内存布局规定了Java在运行过程中内存申请.分配.管理的策略,保证了JV ...

最新文章

  1. 使用memcache的session入库
  2. 22种代码味道(Martin Fowler与Kent Beck)
  3. 牛客练习赛44 C 小y的质数 (数论,容斥定理)
  4. NS2:undefined reference to `xxx' collect2: error: ld returned 1 exit status
  5. eZ publish 3 安装指南
  6. 16个最有趣汉字,说透为人处世
  7. zTree树形控件讲解
  8. photoshop cs3 无法复制文字的解决方案
  9. 生产订单“生产线别”带入生产入库单
  10. web安全的一些专业术语介绍
  11. unity3d让模型不受3dCamera FOV的影响
  12. centos下kafka的安装和使用
  13. Android 利用高德地图API进行定位、开发电子围栏、天气预报、轨迹记录、搜索周边(位置)
  14. 关于各种USB启动模式(MBR)的原理剖析
  15. Android 模拟手指滑动
  16. 5月6日----5月9日一年级课程表
  17. AArch64教程第一章
  18. 软件工程师薪水_13个薪水最高的技术工作软件工程师可以致力于提高薪水
  19. 使用spire.Doc实现一键替换Word文档里的内容
  20. 以小刀会“的成败论当今创业成败

热门文章

  1. oracle的exp程序,数据库expimp迁移的整个过程,及注意事项
  2. html当前行突出显示,Pandas Dataframes to_html:突出显示表行
  3. js获取当前日期时间和其他操作
  4. 字符串重复字符统计c语言,[讨论]精简字符串重复字符程序
  5. 数据结构设计_数据结构算法设计题学起来很困难怎么破
  6. 接口做的好怎么形容_大连SIEMENS西门子M174接口plc模块
  7. 关于数据分析部门组织架构的探讨
  8. python mro c3_Python的MRO以及C3线性化算法
  9. snmp trap 如何在浏览器中_SNMP Trap的功能介绍
  10. 怎么安装python3.7.3_windows系统安装python3.6.3和python3.7.0