1. 程式人生 > 其它 >EF使用LINQ和Lamda實現SQL查詢的內連線(INNER JOIN)和左連線(LEFT JOIN)

EF使用LINQ和Lamda實現SQL查詢的內連線(INNER JOIN)和左連線(LEFT JOIN)

摘自:https://www.freesion.com/article/7263358177/

 背景介紹:
1.OperateLogInfo:日誌表
2.SystemUserInfo:使用者表
需求:查詢日誌表,要根據日誌表的建立人id查詢出建立人姓名(日誌表連線使用者表)

 內連線

1、sql方式實現

select log.Id,log.UserId,user.UserName 
from OperateLogInfo log,SystemUserInfo user
where log.UserId = user.UserId

2、linq

var dataListByInnerJoinLinq = from
o in dbContext.OperateLogInfo join u in dbContext.SystemUserInfo on o.UserId equals u.UserId select new { LogId = o.Id, CreateUserId = o.UserId, CreateUserName
= u.UserName };  

3、linq  lamda

var dataListByInnerJoinLamda = dbContext.OperateLogInfo.Join(dbContext.SystemUserInfo, r => r.UserId, r => r.UserId,
                      (o, u) => new
                      {
                          LogId = o.Id,
                          CreateUserId 
= o.UserId,    CreateUserName = u.UserName    }).ToList();

  

左連線

 1、sql方式實現

select log.Id,log.UserId,user.UserName 
from OperateLogInfo log left join SystemUserInfo user on log.UserId = user.UserId

 2、linq

var dataListByLeftJoinLinq = from o in dbContext.OperateLogInfo join u in dbContext.SystemUserInfo on o.UserId equals u.UserId into ouJoin
                                             from ou in ouJoin.DefaultIfEmpty()
                                             select new
                                             {
                                                 LogId = o.Id,
                                                 CreateUserId = o.UserId ,
                                                 CreateUserName = ou.UserName
                                             };

3、linq  lamda

var dataListByLeftJoinLamda = dbContext.OperateLogInfo.GroupJoin(dbContext.SystemUserInfo, r => r.UserId, r => r.UserId,
                        (o, uList) => new { Log = o, Users = uList })
                .SelectMany(r => r.Users.DefaultIfEmpty(),(ou, u) => new { Log = ou.Log, User = u })
                .Select(r => new   {   LogId = r.Log.Id,   CreateUserId = r.Log.UserId,   CreateUserName = r.User.UserName   }).ToList();