需求:
现需要将公私账的数据合并入汇款明细中。
分析:
三张表的表结构部分相似,表结构有相似单字段数量及字段名称不同。
方案:
使用类进行合并。将汇款明细(主要展现页面)包含的字段进行扩充至包含另外两张表的有效字段,制作出一个临时类。再将另外两张表的数据映射入类中,形成结构相同的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合并