首页 > 解决方案 > 使用 Linq EF 的动态列

问题描述

我需要使用EF创建一个Linq lambda语句。

我有 4 个需要Join的固定表(不包括参考表) 。但是需要检索的列名是基于引用表中的列名。

在此处输入图像描述

如您在上面的屏幕截图中所见,DB_TABLEcolumn 是需要连接的表的列(请忽略.SHIPTO& .CONSIGNEE,只需REL_BATCH_PARTY)。该DB_FIELD列是我需要选择的列。

例子

SUBSTR({0}CONTACT_PHONE,0,8)

所以我需要像SUBSTR(REL_BATCH_PARTY.CONTACT_PHONE,0,8)。{0} 将替换为表名。

这是我基于参考表的最终 sql 语句:

SELECT *
FROM
  (SELECT
     (SELECT substr(REL_BATCH_PARTY.CONTACT_PHONE, 0, 8)
      FROM REL_BATCH_PARTY
      WHERE REL_BATCH_PARTY.REL_BATCH_ID = REL_BATCH.ID
        AND REL_BATCH_PARTY.TYPE_CODE = 'SHIPTO') CONTACT_PHONE_SUBSTR,

     (SELECT REL_BATCH_PARTY.CONTACT_PHONE
      FROM REL_BATCH_PARTY
      WHERE REL_BATCH_PARTY.REL_BATCH_ID = REL_BATCH.ID
        AND REL_BATCH_PARTY.TYPE_CODE = 'SHIPTO') CONTACT_PHONE,
          TO_CHAR(SYSDATE, 'dd-MM-yyyy') TODAY,
          REL_BATCH.REL_NO,

     (SELECT REL_BATCH_PARTY.ADDR01
      FROM REL_BATCH_PARTY
      WHERE REL_BATCH_PARTY.REL_BATCH_ID = REL_BATCH.ID
        AND REL_BATCH_PARTY.TYPE_CODE = 'CONSIGNEE') ADDR01,
          REL_BATCH_CONTAINER.CONTAINER_NO,
          ROW_NUMBER() OVER(PARTITION BY REL_BATCH.ID
                            ORDER BY REL_BATCH_CONTAINER.ID, REL_BATCH_PARTY.TYPE_CODE) num
   FROM REL_BATCH REL_BATCH
   LEFT JOIN REL_BATCH_PARTY REL_BATCH_PARTY ON REL_BATCH.ID = REL_BATCH_PARTY.REL_BATCH_ID
   LEFT JOIN REL_BATCH_CONTAINER REL_BATCH_CONTAINER ON REL_BATCH.ID = REL_BATCH_CONTAINER.REL_BATCH_ID WHERE ..... )A
WHERE A.NUM = 1

反正有没有使用 Linq Lambda 表达式创建?

DB_FIELD和行将根据参考表中的用户输入而动态变化。将DB_TABLE只使用这 4 个表 ( REL_BATCH, REL_BATCH_PARTY, REL_BATCH_ATTR, REL_BATCH_CONTAINER)。该关系将IDREL_BATCH所有其他 3 个表中具有外键。

谢谢你。

标签: c#entity-frameworklinq

解决方案


推荐阅读