首页 > 数据库 >EF使用linq和lamda实现sql查询的内连接(inner join)和左连接(left join)

EF使用linq和lamda实现sql查询的内连接(inner join)和左连接(left join)

时间:2023-10-13 13:25:57浏览次数:43  
标签:lamda false Log dbContext PageName join IsDel 连接

背景介绍:
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

标签:lamda,false,Log,dbContext,PageName,join,IsDel,连接
From: https://www.cnblogs.com/shy1766IT/p/17761855.html

相关文章

  • 如何强制SQL走性能更优的hash join
    本文分享自华为云社区《【SQL优化】为什么有时候无法走执行性能更优的hashjoin》,作者:leapdb。1.hashjoin通常优于nestloopjoin通常nestloopjoin的复杂度是O(N方),hashjoin时间复杂度是O(N),所以我们一般倾向于使用hashjoin。 在SQL脚本调优过程中通常有两种方式,强制走ha......
  • idea 中无法连接 sql server 数据库,报错 [08S01] 驱动程序无法通过使用安全套接字层(S
    报的错误信息如下:[08S01]驱动程序无法通过使用安全套接字层(SSL)加密与SQLServer建立安全连接。错误:“PKIXpathbuildingfailed:sun.security.provider.certpath.SunCertPathBuilderException:unabletofindvalidcertificationpathtorequestedtarget”。ClientC......
  • 突然之间FinalShell连接不上虚拟机了
    问题描述就一直显示unknown设置的主机地址那里;问题解决在本机ping了一下虚拟机,发现没有问题;在虚拟机也ping了一下百度地址,也没问题;就尝试将之前设置的主机地址由快捷名称改成主机ip地址,就又ok了,也不知道为啥突然识别不到设置的快捷名称;......
  • 群辉安装套件qbittorrent 通过quickconnect连接配置,
    引用, 没有公网IP用Quickconnect访问NAS的套件-群晖-就爱NAS(92nas.com)该配置是transmission通过quickconnect连接,需要qbittorrent通过quickconnect连接的话需要配置如下以qbittorrent 为例,qbittorrent 的访问端口是8085:通过SSH登录群晖,输入命令sudo-i回车。......
  • IntelliJ IDEA 连接远程 Docker 服务端
    IntelliJIDEA连接远程Docker服务端 一、背景说明在使用IntelliJIDEA做Java项目开发时,如果需要将服务打包,根据Dockerfile生成镜像,并上传到远程Linux服务器上,并部署运行容器。可以将打好的工程jar包先上传在Linux服务器上,执行Dockerfile文件,生成镜像,然后运行......
  • 云网络对等连接产品的高可用保证
    本文分享自天翼云开发者社区《云网络对等连接产品的高可用保证》,作者:程****超对等连接是指两个同一区域内的VPC之间的网络连接。同一区域内的不同业务部门资源需要互通时,可通过对等连接连通两个账号下的VPC,实现同一区域内的云资源的内网访问。对等连接的建立过程需要双方互相确认......
  • nacos开机自启无法连接上本机的Mysql
    nacos和mysql处于同一台服务器的情况下才会遇到我说的这个问题。一、遇到的问题如下:nacos在设置了开机自启动脚本/usr/lib/systemd/system/nacos.service,并且设置了systemctlenablenacos。mysql给nacos使用的用户开启了%和localhost均可连接的权限。这种情况下,nacos开机自......
  • 【FTP】FlashFXP 530 Non-anonymous ... 连接失败(连接已被客户端关闭)
    参考的这个图: ......
  • git多分支、git远程仓库、ssh方式连接远程仓库、协同开发、冲突解决
    git多分支 ##命令操作分支-1创建分支gitbranchdev-2查看分支gitbranch-3分支合并(可能经常用)gitmergedev#需要在master分支上,合并dev-4删除分支gitbranch-d分支名#不能在当前分支上,删除当前分支......
  • FileZilla 超时连接失败问题解决办法
    1.确保ubuntu支持FTP   就是安装ssh。      首先查看你有没有:sudops-e|grepssh红色箭头存在就代表你有的!如果没有那就去安装吧!2.确保ubuntu和windouws都关闭防火墙!【1】ubuntu打开终端输入:sudoufwdisable就会出现【2】windows中在搜索框中搜索防火墙:关闭......