背景介紹:
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;
}
生成的sql:
Ending~