技术交流 > 心得分享 > EF使用linq和lamda实现sql查询的内连接(inner join)和左连接(left join)

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

//内连接(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
                              };

//左连接(left 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();

//左连接(left 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
                             };


2023-05-02 15:59:35
评论
  • 评论加载中...

评论内容: