EF使用linq和lamda实现sql查询的内连接(inner join)和左连接(left join)
背景介绍:
1.OperateLogInfo:日志表
2.SystemUserInfo:用户表
需求:查询日志表,要根据日志表的创建人id查询出创建人姓名(日志表连接用户表)
public static string Test() { string result = null; var sqlLogs = new List<string>(); EfDepositoryExtension.Execuse(dbContext => { dbContext.Database.Log = r => sqlLogs.Add(r); //内连接(inner join):lamda var dataListByInnerJoinLamda = dbContext.OperateLogInfo.Where(r => r.IsDel == false).Join( dbContext.SystemUserInfo.Where(r => r.IsDel == false), r => r.CreateUser, r => r.UserId, (o, u) => new { LogId = o.Id, PageName = o.PageName, LogContent = o.Des, CreateDate = o.CreateDate, CreateUserId = o.CreateUser, CreateUserName = u.UserName }).ToList(); //内连接(inner join):linq var dataListByInnerJoinLinq = from o in dbContext.OperateLogInfo.Where(r => r.IsDel == false) join u in dbContext.SystemUserInfo.Where(r => r.IsDel == false) on o.CreateUser equals u.UserId select new { LogId = o.Id, PageName = o.PageName, LogContent = o.Des, CreateDate = o.CreateDate, CreateUserId = o.CreateUser, CreateUserName = u.UserName }; //左连接(inner join):lamda var dataListByLeftJoinLamda = dbContext.OperateLogInfo.Where(r => r.IsDel == false) .GroupJoin(dbContext.SystemUserInfo.Where(r => r.IsDel == false), r => r.CreateUser, 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, PageName = r.Log.PageName, LogContent = r.Log.Des, CreateDate = r.Log.CreateDate, CreateUserId = r.Log.CreateUser, CreateUserName = r.User.UserName }).ToList(); //左连接(inner join):linq var dataListByLeftJoinLinq = from o in dbContext.OperateLogInfo.Where(r => r.IsDel == false) join u in dbContext.SystemUserInfo.Where(r => r.IsDel == false) on o.CreateUser equals u.UserId into ouJoin from ou in ouJoin.DefaultIfEmpty() select new { LogId = o.Id, PageName = o.PageName, LogContent = o.Des, CreateDate = o.CreateDate, CreateUserId = o.CreateUser, CreateUserName = ou.UserName }; }); LogTestService.Info(null, sqlLogs.ToArray()); return result; }
源文:https://blog.csdn.net/m0_37886901/article/details/104949924
此随笔或为自己所写、或为转载于网络。仅用于个人收集及备忘。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2020-10-13 Cannot set Column 'EffectiveDate' to be null. Please use DBNull instead.
2019-10-13 C# Mysql 查询 Rownum
2015-10-13 nth-child() 选择器