博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ef实现左关联查询
阅读量:5131 次
发布时间:2019-06-13

本文共 1748 字,大约阅读时间需要 5 分钟。

在EF中,当在dbset使用join关联多表查询时,连接查询的表如果没有建立相应的外键关系时,EF生成的SQL语句是inner join(内联),对于inner join,有所了解的同学都知道,很多时候这并不是我们的本意,实例如下:

var list = from o in context.CTMS_OD_ORDERS                       join d in context.CTMS_SUP_DOCTOR on o.OWNERDOCID equals d.USERID join e in context.CTMS_OD_ORDERSEVALUATION on o.ORDERID equals e.ORDERID select o;`

EF生成了内连接(inner join)查询,当两个表的任一表的数据不匹配时,查询结果就为空!实际上left join(左联接)才是我们想要的,那么怎么样才能生成left join查询呢?其实只要我们如下改造,EF就能为我们生成left join(左联接)查询!

       data = from o in context.CTMS_OD_ORDERS                       join d in context.CTMS_SUP_DOCTOR on o.OWNERDOCID equals d.USERID into dc //这里dc就相当于d from dci in dc.DefaultIfEmpty() //这里dci就相当于dc,所以dci就相当于d,DefaultIfEmpty(),它的作用是当连接的表为空时也会有一条空的数据,达到了left join的效果 join e in context.CTMS_OD_ORDERSEVALUATION on o.ORDERID equals e.ORDERID into ec from eci in ec.DefaultIfEmpty() where o.USERID == userID && (string.IsNullOrEmpty(type) || o.PRODUCTNAME.Contains(type)) select new ODOrders { BalanceStatus = o.BALANCESTATUS, ChannelOrderID = o.CHANNELORDERID, ChannelType = o.CHANNELTYPE, CreateDateTime = o.CREATEDATETIME, CreateUserID = o.CREATEUSERID, CreateUserName = o.CREATEUSERNAME, DocName = dci.DOCNAME, EvalutionStatus = string.IsNullOrEmpty(eci.ORDERID) ? "0" : "1", PayTime = o.PAYTIME, ProductCode = o.PRODUCTCODE, ProductName = o.PRODUCTNAME, ProductInstanceId = o.PRODUCTINSTANCEID, ProductID = o.PRODUCTID, OrderID = o.ORDERID, OrderCode = o.ORDERCODE, OrderStatus = o.ORDERSTATUS, OrderType=o.ORDERTYPE, TotalFee = o.TOTALFEE, UserID=o.USERID, UserName=o.USERNAME };

对比上下两种写法,可以看到在on表的后面我们加上了into xx,还有不要忘记,还需加上from xxx in xx.DefaultIfEmpty(),重要的就是最后的xx.DefaultIfEmpty(),它的作用是当连接的表为空时也会有一条空的数据,达到了left join的效果。

转载于:https://www.cnblogs.com/qingfenglin/p/10854060.html

你可能感兴趣的文章
Java反射机制及其Class类浅析
查看>>
Postman-----如何导入和导出
查看>>
移动设备显示尺寸大全 CSS3媒体查询
查看>>
图片等比例缩放及图片上下剧中
查看>>
【转载】Linux screen 命令详解
查看>>
background-clip,background-origin
查看>>
Android 高级UI设计笔记12:ImageSwitcher图片切换器
查看>>
【Linux】ping命令详解
查看>>
对团队成员公开感谢博客
查看>>
java学习第三天
查看>>
python目录
查看>>
django+uwsgi+nginx+sqlite3部署+screen
查看>>
Andriod小型管理系统(Activity,SQLite库操作,ListView操作)(源代码下载)
查看>>
在Server上得到数据组装成HTML后导出到Excel。两种方法。
查看>>
浅谈项目需求变更管理
查看>>
经典算法系列一-快速排序
查看>>
设置java web工程中默认访问首页的几种方式
查看>>
ASP.NET MVC 拓展ViewResult实现word文档下载
查看>>
8、RDD持久化
查看>>
第二次团队冲刺--2
查看>>