通过循环遍历行合并两个数据表

时间:2017-12-14 06:19:42

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

大家好我有两个这样的datatable1格式

#set ($roleLocalServiceUtil = $serviceLocator.findService("com.liferay.portal.service.RoleLocalService"))

#if  ($roleLocalServiceUtil.hasUserRole($user.getUserId(),$user.getCompanyId(), "<YOUR ROLE NAME>", true))

我有另一个像这样的数据表2

 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 

结果表(与datatable1和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

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

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

非常感谢...

1 个答案:

答案 0 :(得分: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)
                     };
    }