Dave.Lee 2023-06-21 08:51 采纳率: 50%
浏览 14

C#LeftJoin条件为截取参数

private SqlBuilderCore<Reel_SolderPasteGlueEntity> GetExpression(Reel_SolderPasteGlueQueryInput input)
        {
            var condition = this.GetEntityExpression(input);

            return SqlBuilder
                    .Select<Reel_SolderPasteGlueEntity, ReelEntity, PartMaster_SolderPasteGlueEntity,WorkOrderEntity,ModelEntity>((a, b, c,d,e) =>
                        new
                        {
                            a,
                            b.DateCode,
                            b.Expdate,
                            b.QTY,
                            b.OQTY,
                            RemainExpDate = " ROUND(TO_NUMBER(TRUNC(b.EXPDATE) -TRUNC(SYSDATE)))*24",
                            b.LotCode,
                            c.DurationOfStanding,
                            StandingEndTime = " a.STANDINGSTARTIME + c.DURATIONOFSTANDING/24/60",
                            AuditModelName = e.ModelName,
                            AuditWorkOrder = d.WorkOrder
                            
                        }, _repository.DatabaseType, isEnableFormat: false)
                    .LeftJoin<ReelEntity>((a, b) => a.Id == b.Id)
                    .LeftJoin<PartMaster_SolderPasteGlueEntity>((a, c) => a.Pn == c.Pn)
                    .LeftJoin<WorkOrderEntity>((a,d)=>  "REGEXP_SUBSTR(a.WORKORDER, '^[^,]+', 1, 1) "==d.WorkOrder)
                    .LeftJoin<WorkOrderEntity,ModelEntity>((a,d,e)=>d.ModelId==e.Id)
                    .Where(condition);
        }

我用上述代码,调试生成SQL:

SELECT
    a.*,
    b.DATECODE,
    b.EXPDATE,
    b.QTY,
    b.OQTY,
    ROUND(TO_NUMBER(TRUNC(b.EXPDATE) -TRUNC(SYSDATE)))* 24 AS RemainExpDate,
    b.LOTCODE,
    c.DURATIONOfSTANDING,
    a.STANDINGSTARTIME + c.DURATIONOFSTANDING / 24 / 60 AS StandingEndTime,
    REGEXP_SUBSTR(a.WORKORDER, '^[^,]+', 1, 1) AS AuditWorkOrder,
    e.MODELNAME AS AuditModelName
FROM
    MC_REEL_SOLDERPASTEGLUE a
LEFT JOIN MC_REEL b ON
    a.ID = b.ID
LEFT JOIN MC_PARTMASTER_SOLDERPASTEGLUE c ON
    a.PN = c.PN
LEFT JOIN MC_WORKORDER d ON
    :p__1 = d.WORKORDER
LEFT JOIN MC_MODEL e ON
    d.MODELID = e.ID
WHERE
    a.ID = :p__2

数据库里可以查到数据,代码里没有传到WorkorderEntity 数据,因此没有获取到ModelName,我知道问题出在这条代码:

 .LeftJoin<WorkOrderEntity>((a,d)=>  "REGEXP_SUBSTR(a.WORKORDER, '^[^,]+', 1, 1) "==d.WorkOrder)

但是没有找到修改的办法,用过ChatGpt,但未解决问题~

  • 写回答

2条回答 默认 最新

  • IT技术分享社区 数据库领域优质创作者 2023-06-21 09:05
    关注

    确保你构造出来的sql语句和你上面贴的是一致的,可以调试的时候打印一下

    评论

报告相同问题?

问题事件

  • 创建了问题 6月21日

悬赏问题

  • ¥15 基于ffmpeg 编码成yuv420p nv12的问题
  • ¥15 python随机森林对两个excel表格读取,shap报错
  • ¥15 基于STM32心率血氧监测(OLED显示)相关代码运行成功后烧录成功OLED显示屏不显示的原因是什么
  • ¥100 X轴为分离变量(因子变量),如何控制X轴每个分类变量的长度。
  • ¥30 求给定范围的全体素数p的(p-2)/p的连乘积值
  • ¥15 VFP如何使用阿里TTS实现文字转语音?
  • ¥100 需要跳转番茄畅听app的adb命令
  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument