【问题标题】:merge two datatables by looping through the rows通过遍历行合并两个数据表
【发布时间】:2017-12-14 06:19:42
【问题描述】:

大家好,我有两个如下格式的 datatable1

 legacy                   subid                               converted     licPart         count
Ent 100 EP Lic E-LTU    7ks7gp-qc42sn-g7zk0q-7pzmb7-xdp6yb  NL AC  CE E-LTU  LIC-CP-EN-100  100
Ent 100 EP Lic E-LTU    7ks7gp-qc42sn-g7zk0q-7pzmb7-xdp6yb  NL OB USR E-LTU  LIC-CP-EN-100  100
Ent 100 EP Lic E-LTU    7ks7gp-qc42sn-g7zk0q-7pzmb7-xdp6yb  NL OG EP E-LTU   LIC-CP-EN-100  100
Ent 100 EP Lic E-LTU    7ks7gp-qc42sn-g7zk0q-7pzmb7-xdp6yb  NL AC  CE E-LTU  LIC-CP-EN-100  100
Ent 100 EP Lic E-LTU    7ks7gp-qc42sn-g7zk0q-7pzmb7-xdp6yb  NL OB USR E-LTU  LIC-CP-EN-100  100
Ent 100 EP Lic E-LTU    7ks7gp-qc42sn-g7zk0q-7pzmb7-xdp6yb  NL OG EP E-LTU   LIC-CP-EN-100  100
Ent 1K EP Lic E-LTU     7ks7gp-qc42sn-g7zk0q-7pzmb7-xdp6yb  NL AC CE E-LTU   LIC-CP-EN-1K   1000
Ent 1K EP Lic E-LTU    7ks7gp-qc42sn-g7zk0q-7pzmb7-xdp6yb   NL OB USR E-LTU  LIC-CP-EN-1K   1000
Ent 1K EP Lic E-LTU    7ks7gp-qc42sn-g7zk0q-7pzmb7-xdp6yb   NL OG EP E-LTU    LIC-CP-EN-1K  1000 

我还有另一个这样的datatable2

 ACCount    OBCount  OGCount        legacy
  50        25       25         Ent 100 EP Lic E-LTU
  25        25       50         Ent 100 EP Lic E-LTU
  375       375      250        Ent 1K EP Lic E-LTU

对于结果表(与 datatable1 和 datatable2 合并),我正在寻找如下表

 legacy                   subid                               converted     licPart         count
Ent 100 EP Lic E-LTU    7ks7gp-qc42sn-g7zk0q-7pzmb7-xdp6yb  NL AC  CE E-LTU  LIC-CP-EN-100  50
Ent 100 EP Lic E-LTU    7ks7gp-qc42sn-g7zk0q-7pzmb7-xdp6yb  NL OB USR E-LTU  LIC-CP-EN-100  25
Ent 100 EP Lic E-LTU    7ks7gp-qc42sn-g7zk0q-7pzmb7-xdp6yb  NL OG EP E-LTU   LIC-CP-EN-100  25
Ent 100 EP Lic E-LTU    7ks7gp-qc42sn-g7zk0q-7pzmb7-xdp6yb  NL AC  CE E-LTU  LIC-CP-EN-100  25
Ent 100 EP Lic E-LTU    7ks7gp-qc42sn-g7zk0q-7pzmb7-xdp6yb  NL OB USR E-LTU  LIC-CP-EN-100  25
Ent 100 EP Lic E-LTU    7ks7gp-qc42sn-g7zk0q-7pzmb7-xdp6yb  NL OG EP E-LTU   LIC-CP-EN-100  50
Ent 1K EP Lic E-LTU     7ks7gp-qc42sn-g7zk0q-7pzmb7-xdp6yb  NL AC CE E-LTU   LIC-CP-EN-1K   375
Ent 1K EP Lic E-LTU    7ks7gp-qc42sn-g7zk0q-7pzmb7-xdp6yb   NL OB USR E-LTU  LIC-CP-EN-1K   375
Ent 1K EP Lic E-LTU    7ks7gp-qc42sn-g7zk0q-7pzmb7-xdp6yb   NL OG EP E-LTU    LIC-CP-EN-1K  250 

如果您观察到第一个表和最后一个表之间的差异是计数列,我需要将表 1 计数与表 2 AcCount、OBCount、OGcount 合并为相同的旧版......

任何人都可以提出任何对我非常有用的想法和建议。

提前非常感谢..

【问题讨论】:

  • 你能提供任何示例输出吗?
  • @Mohammad 请查看最后一个表(结果表).. 不同的是最后一列(计数)
  • 您在表 2 中有 2 个相同遗产的条目。您如何确定要合并的计数?
  • @Mohammad 定义的旧列行仅与表 1 相同。此行属于“NL AC CE E-LTU”到“AC 计数”,与 ..
  • @Mohammad 在表 2 中,我们将被视为单行,而在表 1 中,我们需要将其视为相对于“旧版”列的单列更改

标签: c# .net linq c#-4.0 datatable


【解决方案1】:

编辑:添加转换方法

使用 LINQ,您可以执行以下操作:

    public class Table1
    {
        public string legacy, subid, converted, licPart;
        public int count;
    }
    public class Table2
    {
        public int ACCount, OBCount, OGCount;
        public string legacy;
    }

    private int Convert(string converted, int ACCount, int OBCount, int OGCount)
    {
        return converted.StartsWith("NL AC ") ? ACCount :
            converted.StartsWith("NL OB ") ? OBCount : OGCount;
    }

    private void JoinTables()
    {
        List<Table1> table1 = new List<Table1>();
        List<Table2> table2 = new List<Table2>();

        var result = from t1 in table1
                     join t2 in table2 on t1.legacy equals t2.legacy
                     select new Table1
                     {
                         legacy = t1.legacy,
                         converted = t1.converted,
                         licPart = t1.licPart,
                         subid = t1.subid,
                         count = Convert(t1.converted, t2.ACCount, t2.OBCount, t2.OGCount)
                     };
    }

【讨论】:

  • 对不起,我需要考虑所有计数(ACCount,OBCount,OGCount)并与相应的列合并.. 在这里我只能看到一个计数(即 ACCount)
  • 您如何看待它们?你的标准是什么?您可以将其插入到连接中。
  • 我需要在问题中表示我上面提到的结果表(表 3 格式)..你能看看吗..
  • @EnigmaState,好吧。然后解析converted 列。如果它包含(AC、OB 或 OG),对吗?还有其他条件吗?
  • 没有其他条件只需要比较legacy列并合并对应的count行
猜你喜欢
  • 1970-01-01
  • 2020-02-09
  • 2021-11-27
  • 1970-01-01
  • 2017-04-08
  • 2010-12-12
相关资源
最近更新 更多