求教多表拼接以后取最大值 返回
SqlSugar
待处理
124
悬赏:5 飞吻
var pageList = await _db.Queryable<MemberDataModel>()
.InnerJoin<MemberOrgDataModel>((t1, t2) => t2.ParentId == t1.Oid && t2.OrgClientId == t1.OrgClientId)
.InnerJoin<MemberLevelDataModel>((t1, t2, t3) => t3.ParentId == t2.Oid && t3.OrgClientId == t2.OrgClientId)
.InnerJoin<MemberEquityBalanceDataModel>((t1, t2, t3, t4) => t4.ParentId == t3.ParentId && t4.OrgClientId == t3.OrgClientId)
.Where(t1 => t1.OrgClientId == request.OrgClientId && t1.CustomerType == "NormalCustomer")
.Select((t1, t2, t3, t4) => new QueryMemberLevelPortraitPageListOutput
{
Oid = t1.Oid,
Code = t1.MemberCode,
LevelId = t3.LevelId,
LevelChangeType = t3.LevelChangeType,
LevelChangeTime = t3.LevelChangeTime != null ? (DateTime)t3.LevelChangeTime : t2.JoinTime!,
LevelStartDate = t3.LevelStartDate != null ? (DateTime)t3.LevelChangeTime! : t2.JoinTime!,
LevelEndDate = t3.LevelEndDate,
NextLevel = t4.NextLevel,
UpgradeDiff = t4.UpgradeDiff,
UpgradeTotal = t4.UpgradeTotal,
RetainDiff = t4.RetainDiff,
RetainTotal = t4.RetainTotal,
LevelProgramId = t3.LevelProgramId,
OrgClientId = t1.OrgClientId,
// 方案一
//CreatedOn = SqlFunc.IF(t3.CreatedOn > t4.CreatedOn).Return(t3.CreatedOn).End(t4.CreatedOn),
/// 方案二
//CreatedOn = SqlFunc.MappingColumn<DateTime>("GREATEST(t3.CreatedOn, t4.CreatedOn)"),
UpdatedOn = SqlFunc.IF(t3.UpdatedOn > t4.UpdatedOn).Return(t3.UpdatedOn).End(t4.UpdatedOn),
SysUpdateTime = SqlFunc.IF(t3.SysUpdateTime > t4.SysUpdateTime).Return(t3.SysUpdateTime).End(t4.SysUpdateTime)
})
.NoLock()
.MergeTable()
.WhereIF(request.CursorId <= 0, e => e.SysUpdateTime >= request.CursorDateTime)
.WhereIF(request.CursorId > 0, e => e.SysUpdateTime > request.CursorDateTime || (e.SysUpdateTime == request.CursorDateTime && e.Oid > request.CursorId))
.OrderBy(e => new
{ e.SysUpdateTime, e.Oid
})
.Take(request.PageSize)
.NoLock()
.ToListAsync();目前用的方案一,方案二有报错 ,如果是3个字段、4个字段取最大值,方案一就会比较麻烦
方案二报错
{ "StatusCode": 500, "Succeeded": false, "Errors": "'GREATEST' 不是可以识别的 内置函数名称。\r\n关键字 'with' 附近有语法错误。如果此语句是公用表表达式、xmlnamespaces 子句或者更改跟踪上下文子句,那么前一个语句必须以分号结尾。\r\n关键字 'with' 附近有语法错误。如果此语句是公用表表达式、xmlnamespaces 子句或者更改跟踪上下文子句,那么前一个语句必须以分号结尾。\r\n关键字 'with' 附近有语法错误。如果此语句是公用表表达式、xmlnamespaces 子句或者更改跟踪上下文子句,那么前一个语句必须以分号结尾。\r\n关键字 'with' 附近有语法错误。如果此语句是公用表表达式、xmlnamespaces 子句或者更改跟踪上下文子句,那么前一个语句必须以分号结尾。", "Timestamp": "1782821767"}方案三,这个写法是错的吧? RowMax 是不是不能这样使用的
CreatedOn = SqlFunc.RowMax(t1.CreatedOn, t2.CreatedOn, t3.CreatedOn),