(BY框架)不同结构的表合并

文章描述了一个将三张表(公账、私账和汇款明细)的数据合并的过程。首先,通过创建一个临时类来扩展汇款明细的字段以匹配其他两表的字段。然后,映射数据到这个类中,形成结构相同的列表,再转换为datatable并使用datatable.Merge()方法进行合并。同时,对数据来源进行了标记,以便在最终展示中区分。在处理过程中,查询并填充了额外信息以完善数据。
摘要由CSDN通过智能技术生成

需求:

现需要将公私账的数据合并入汇款明细中。

分析:

三张表的表结构部分相似,表结构有相似单字段数量及字段名称不同。

方案:

使用类进行合并。将汇款明细(主要展现页面)包含的字段进行扩充至包含另外两张表的有效字段,制作出一个临时类。再将另外两张表的数据映射入类中,形成结构相同的LIst,转换成datatable后可使用datatable.Merge()方法进行合并。(该方法只适用于结构相同的datatable进行合并,所以需要处理生成datatable之前的list,使其结构相同)

其他:

其他页面汇入的数据会在备注中标记,方便查找数据来源

最终展示的页面中不包含的信息,如果可以查询,尽量查询完整后写入

 #region 公私账查询结果
        var publicaccount = DB.Select<Fa_Publicaccount>().Where(x => x.recorddate >= str_startdate).Where(x => x.recorddate <= str_enddate).ToList(s => new V_Remittance
        {
            ID = s.ID,
            Paymentdate = s.recorddate,//收付款时间
            abbrName = s.reObject,     //公司
            BusinessContent = s.busconten,  //业务内容
            receivedAmount = s.receiptprice, //收款金额
            Payment = s.paymentprice,  //付款金额
            frmcompanyID = s.companyID, //公司ID
            remittanceway = s.anID.ToString().Trim(),//暂存ID
            memo = s.memo,  //备注
        }); //公账
        foreach (var item in publicaccount)
        {
            if (!string.IsNullOrEmpty(item.remittanceway))
            {
                Fa_account fa_account = new Fa_account();
                fa_account = DB.Select<Fa_account>().Where(x => x.ID == ConvertEx.ToGuid(item.remittanceway.Trim())).First();
                if (fa_account != null)
                {
                    item.remittanceway = fa_account.accname;
                }
            }
            item.memo += "(公账)";//公私账页面数据在备注中标记
        }
        var privateaccount = DB.Select<Fa_Privateaccount>().Where(x => x.padate >= str_startdate).Where(x => x.padate <= str_enddate).ToList(s => new V_Remittance
        {
            ID = s.ID,
            Paymentdate = s.padate,//收付款时间
            abbrName = s.paobject,//公司
            BusinessContent = s.pacontent,//业务内容
            receivedAmount = s.pareceipt, //收款金额
            Payment = s.papayment,//付款金额
            frmcompanyID = s.companyID,//公司ID
            remittanceway = s.anID.ToString().Trim(),//暂存ID
            memo = s.memo,//备注
        }); //私账
        foreach (var item in privateaccount)
        {
            if (!string.IsNullOrEmpty(item.remittanceway)) //查询付款方式
            {
                Fa_account fa_account = new Fa_account();
                fa_account = DB.Select<Fa_account>().Where(x => x.ID == ConvertEx.ToGuid(item.remittanceway.Trim())).First();
                if (fa_account != null)
                {
                    item.remittanceway = fa_account.accname;
                }
            }
            item.memo += "(私账)";//公私账页面数据在备注中标记
        }
        var pubAndpri_accout = publicaccount.Concat(privateaccount).ToList();

        //查询公司名称
        foreach (var item in pubAndpri_accout)
        {
            if (item.frmcompanyID != Guid.Empty && item.frmcompanyID.ToString() != string.Empty)
            {
                Dict_company company = new Dict_company();
                company = DB.Select<Dict_company>().Where(x => x.ID == item.frmcompanyID).First();
                if (company != null)
                {
                    item.abbrName = company.fullName;
                    item.rmcode = company.code;
                }
            }
        }
        DataTable generalaccount = LINQToDataTable(pubAndpri_accout);
        #endregion
        //data为原汇款明细的数据
        DataTable dtResult = LINQToDataTable(data);
        dtResult.Merge(generalaccount);//datable合并

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值