var query = from f in queryMCFaultResult
join e in queryMesFault
on f.FaultCode equals e.b.FaultCode
join mesRepair in joinMesRepair
on **new { A = f.MachineNum, B = e.a.F_ID }** equals
**new { A = mesRepair.h.MachineNum, B = mesRepair.h.F_Problem }**
into rightRow from rw in rightRow.DefaultIfEmpty()
where rw==null
左连接写法 var query = from f in queryMCFaultResult join e in queryMesFault on f.FaultCode equals e.b.FaultCode join mesRepair in joinMesRepair
在EF中,当在dbset使用join关联多表查询时,连接查询的表如果没有建立相应的外键关系时,EF生成的SQL语句是inner join(内联),对于inner join,有所了解的同学都知道,很多时候这并不是我们的本意,实例如下:
var list = from o in context.CTMS_OD_ORDERS
join d in cont...
from order in db.T_ClientWorkOrder
work in db.T_ClientWorkOrder_Work on order.ID equals work.FK_OrderId
nodeconfig in db.T_ClientWorkOrder_NodeConfig on new { key1 = work.NodeKey, key2 = order.ProjectId } equals new { key1 =
EF实现左连接时,一次只能实现一次左联。有时候会出现需要右连接的问题。此时,我的做法是在中间建立一张过渡的虚拟表。
var subQuery = from tt in deviceInfo
join t7 in deviceType on tt.deviceTypeId equals t7.id
into f
from fq in f.DefaultIfEmpty()
join t2 in dis...
左连接不管怎么样,左表都是完整返回的
当只有一个条件a.id=b.id的时候:
左连接就是相当于左边一条数据,匹配右边表的所有行,满足on后面的第一个条件a.id=b.id的进行返回
当有两个条件的时候a.id=b.id and a.age>100(当第二个条件进行左表筛选时)
就是左边这张表只有a.age>100的行,才会参与右表的每行匹配(但是a.age<100的行也会返回,只不过age<100的行是不可能匹配到
问题来了,我要和故事开头一样,老公-狗,老婆-猫,对应起来,怎么查询呢?
有同学说这还不简单?两个遍历一下不就行了。
首先 取出 List<宠物>集合,再根据宠物的主人Id去查找对应的主人信息就好了。
如果这样设计,那么将会执行3次查询:
l 查出所有的宠物。
l 查出阿猫的主人。
l 查出阿狗的主人。
数据量不大还好,数据量要是大一点这是非常影响速
var aList = menu.GetPagedList(page, limit, out totalCount, filter, orderBy).ToList(); //集合1
var bList = menu.GetAll().ToList(); //集合2
var data = from a in aList
join b in bList on a.menu
当使用EF中的dbset进行join操作的时候如果,如果表之间没有关联关系的话,生成的sql语句是 inner join(inner join 和 left join的区别 就不在这阐述了),eg:
var user = await (from u in this.context.MUser.Where(sa => sa.Id == pid)
join u...
h1u2f3a4n5f6a7n8: