gpt4 book ai didi

c# - 加入和更新数据表

转载 作者:行者123 更新时间:2023-11-30 22:10:41 25 4
gpt4 key购买 nike

我有两个 Table1 和 Table2,其值列如下:这是两个表:我想更新表 1 中的“PaidAmount”。基于两个表中的“InvoiceNo”列加入。

表 1:

 InvoiceNo  Vendor   InvoiceValue  InvoiceDate      PaidAmount 
--------- ------ ------------- ----------- ----------
1 AA 15000 01 Dec 2013 0
2 BB 20000 10 Dec 2013 0
3 CC 10000 18 Dec 2013 0

表 2:

 VoucherNo   Date       InvoiceNo  Amount
------- ----------- ---------- ------
001 01 Nov 2013 1 5000
002 10 Nov 2013 2 6000
003 20 Nov 2013 3 7000
001 02 Nov 2013 1 2000

我想要的数据表应该是这样的:

期望表:

 InvoiceNo  Vendor   InvoiceValue  InvoiceDate      PaidAmount 
--------- ------ ------------- ----------- ----------
1 AA 15000 01 Dec 2013 7000
2 BB 20000 10 Dec 2013 6000
3 CC 10000 18 Dec 2013 7000

如何实现这个结果?我试过下面的。

Table1.AsEnumerable().Join(Table2.AsEnumerable(),
dt1_Row => dt1_Row.ItemArray[0],
dt2_Row => dt2_Row.ItemArray[2],
dt1_Row, dt2_Row) => new { dt1_Row, dt2_Row }
).ToList()
.ForEach(o => o.dt1_Row.SetField(4, o.dt2_Row.ItemArray[3]));

但是它给出的结果是

InvoiceNo  Vendor   InvoiceValue  InvoiceDate      PaidAmount 
--------- ------ ------------- ----------- ----------
1 AA 15000 01 Dec 2013 2000
2 BB 20000 10 Dec 2013 6000
3 CC 10000 18 Dec 2013 7000

如何获得我想要的 table ?

最佳答案

您的联接为您提供了多个 row1、row2 对的列表。
所以你循环遍历每一对,第一次是 invoiceNo1,row1.PaidAmount = 5000,然后你的循环继续,第二次,row1.PaidAmount = 2000,所以你的结果。

你想对row2的Amount值进行求和,所以加入后,你必须按InvoiceValue对数据进行分组,然后进行求和:

foreach(var grp in Table1.AsEnumerable()
.Join(Table2.AsEnumerable(),
dt1_Row => dt1_Row.ItemArray[0],
dt2_Row => dt2_Row.ItemArray[2],
dt1_Row, dt2_Row) => new { dt1_Row, dt2_Row }
)
.GroupBy(o => o.dt1_Row.ItemArray[0]))
{
var row1 = grp.First().dt1_Row;
var sum = grp.Sum(t => Convert.ToDecimal(t.dt2_Row.ItemArray[3]));
row1.SetField(4, sum)
}

为了提高可读性,请尽量避免使用 List 的 ForEach,它不会真正改进您的代码。

关于c# - 加入和更新数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20682842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com