回到目录

对于linq to sql里实现left join我已经介绍过了,这篇文章的出现是由于最近在项目里遇到的一个问题,解决这个问题花了我不少时间,可能有2个小时,事件是这样的,对于两个表,它们是一对多关系,而需求是返回一个一对一的关系,并将最新的数据返回,这个很多同学都知道,可以使用inner join,但是,对于inner  join来说,当处理的是一对多关系时,它将会出现多条记录,这也是正常的;而它并不满足我们今天的需求,经过测试后,找到了解决这个问题的方法,下面看代码:

一对多关系

from r in base.GetModel()
join data in new TsingDa_NewLearningBarRepository<FAQ_Reply>(UnitWork).GetModel().Where(i => i.Status == (int)Status.Normal)
on r.FAQInfoID equals data.FAQInfoID into list

这个很容易理解,将满足faqinfoId的FAQ_Reply集合获出,放入list变量中。

一对一关系

from r in base.GetModel()
join data in new TsingDa_NewLearningBarRepository<FAQ_Reply>(UnitWork).GetModel().Where(i => i.Status == (int)Status.Normal)
on r.FAQInfoID equals data.FAQInfoID

这种写法是正规的inner join写法,它适合于数据结构中的一对一关系,即两张表有相同的主键,它们在数据中是严格一对一的,如果不是一对一,那种,这个语句将会出现重复数据!

下面是在EF中对left  join进行的一对一改造

 join data in new TsingDa_NewLearningBarRepository<FAQ_Reply>(UnitWork).GetModel().Where(i => i.Status == (int)Status.Normal)on r.FAQInfoID equals data.FAQInfoID into listfrom data in list.EmptyOrDefalt()

可很遗憾,并不成功,还是返回的重复数据,这在传统的linq to sql中是可以的,但在linq to entity中是不行的,因为它们生成SQL语句的内核不同

正确的一对一做法

 join data in new TsingDa_NewLearningBarRepository<FAQ_Reply>(UnitWork).GetModel().Where(i => i.Status == (int)Status.Normal)on r.FAQInfoID equals data.FAQInfoID into listselect new FAQ_Info_Ext(){FAQReply = list.OrderByDescending(i => i.AddTime).FirstOrDefault()}

我们可以看到,它的巧妙是在数据赋值上...

看一个数据库的监控

刚看到后,真是下了我一大跳,怎么连了这么多库呀,晕,然后,本地设断点调试了一下,原来和我的代码没有关系,是其它代码惹的祸!

我的代码运行是这样的

这是可以接受的,在我的预料之中,呵呵。

回到目录

EF架构~LinqToEntity里实现left join的一对一与一对多相关推荐

  1. EF里一对一、一对多、多对多关系的配置和级联删除

    EF里一对一.一对多.多对多关系的配置和级联删除 本章节开始了解EF的各种关系.如果你对EF里实体间的各种关系还不是很熟悉,可以看看我的思路,能帮你更快的理解. I.实体间一对一的关系 添加一个Per ...

  2. EF架构~将数据库注释添加导入到模型实体类中

    回到目录 相关文章系列 第八回 EF架构~将数据库注释添加导入到模型实体类中 第二十一回  EF架构~为EF DbContext生成的实体添加注释(T4模板应用) 第二十二回  EF架构~为EF Db ...

  3. EF架构~DefaultValue让我的UnitOfWork更可读

    在编程世界里,使用"否定式"不是一件好事,因为它的可读性并不高,但有时,为了让使用者减少代码量,还是使用了双重否定,直到DefaultValue的出现,它改变了这一切,它可以为你的 ...

  4. EF架构~为EF DbContext生成的实体添加注释(T4模板应用)

    相关文章系列 第八回 EF架构~将数据库注释添加导入到模型实体类中 第二十一回  EF架构~为EF DbContext生成的实体添加注释(T4模板应用) 第二十二回  EF架构~为EF DbConte ...

  5. EF架构~单表一对多集合的插入(树型结构)

    单表一对多关系很常见,它是一种树形结构,如系统菜单表,部门表,分类表,这些都可以做成单表一对多关系,而这些表做成一对多关系后,如果通过EntityFramework进行插入操作时,会很方便,EF会自动 ...

  6. EF架构~codeFirst从初始化到数据库迁移

    一些介绍 CodeFirst是EntityFrameworks的一种开发模式,即代码优先,它以业务代码为主,通过代码来生成数据库,并且加上migration的强大数据表比对功能来生成数据库版本,让程序 ...

  7. mysql+join+合计_图解MySQL里的各种 JOIN,看完不懂来找我!

    点击关注上方"SQL数据库开发", 设为"置顶或星标",第一时间送达干货作者:码志 链接:https://mazhuang.org/2017/09/11/joi ...

  8. EF架构~在global.asax里写了一个异常跳转,不错!

    回到目录 一般地,网站出现异常后,我们会通过设置web.config的方法来实现友好页的显示,这个方法比较常用,但捕捉的信息不是很具体,在程序测试阶段,我们可以通过global.asax来实现友好的, ...

  9. 键值对在架构设计里的应用

    一.谈谈我对程序的理解 作为程序员你对程序是如何理解的?写这篇文章的时候,我认真思考了下,发现我对程序的理解不是和教科书一样的,我每次听到程序二字我想到的只有两个东西:代码和数据,而每次写程序的时候也 ...

最新文章

  1. 中国AI创新者论坛将于3月21日在清华大学举办
  2. Linux查找文件 —— whereis 、 find、 locate、 which
  3. python为什么用linux_为何Python在Windows下使用比Linux下更方便
  4. factors to consider about the publications
  5. Hi3531与Hi3520 GPIO口的对比及驱动的修改
  6. 教你怎么屏蔽掉在移动端的宽带运营商的流量劫持,屏蔽无耻的广告
  7. Boundary(2020多校第二场B)
  8. 人设崩塌?万茜被盗号甩锅程序员,却两次被官方打脸,网友:作死
  9. 【AI视野·今日NLP 自然语言处理论文速览 第八期】Wed, 16 Jun 2021
  10. 入门篇:函数计算中角色和访问策略的讲解
  11. python的哲学内容_python 哲学或者说文化
  12. 遇见Python.h: No such file or directory的解决方法
  13. Java数据类型分类 1
  14. (转)马云又在押宝智能投顾!
  15. 很喜欢博客园这个平台
  16. 电商格局谋定重整-万祥军:李玉庭对话中国经济和信息化
  17. C++实现排列组合问题
  18. 网络编程中常用的fd是什么
  19. 2013,我的创业记忆片段
  20. FATFS FIL 结构

热门文章

  1. apt-get软件包管理命令 和 apt-key命令
  2. 某电视台晚会多机位特殊视频修复案例
  3. Pokémon Go火遍全球,开启全民捕捉小精灵的时代
  4. 28.Node.js 函数和匿名函数
  5. Bzoj1029 [JSOI2007]建筑抢修
  6. POJ3237 树的维护
  7. Android安装apk
  8. cocos2dxFlappyBird开发总结二:开发环境介绍
  9. ubuntu20.04的xfce4下面安装百度输入法linux版本
  10. 技嘉主板GA-B85M-D3V PLUS 1150组装问题汇总