求教多表拼接以后取最大值 返回

SqlSugar 待处理
124
该叫什么 jasonhui 发布于1周前
悬赏: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),


热忱回答0