EF使用LINQ和Lamda實現SQL查詢的內連線(INNER JOIN)和左連線(LEFT JOIN)
阿新 • • 發佈:2022-12-05
摘自: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 = fromo 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();