我有以下示例列表:
我需要迭代列表,对于列表中的每条记录,我需要计算一个值并根据特定条件将其存储在新列中:
- 过滤路径包含记录否的记录
- 过滤 A、B 和 C 列中具有相同值的记录
- 计算金额总和并将其保存为TotalAmount
举个例子:
对于第一条记录,我需要查找列表中 Path 包含记录的 No (1000) 且 A 列中具有相同值的所有记录、B 和 C。因此,在第一条记录的示例中,我们获取索引 = 1 和索引 = 2 的记录,计算金额总和并将其返回到 TotalAmount 列中。
我有这样的想法:
foreach (record in List)
{
var totalAmount = List
.Where(e =>
e.Path.Contains(record.No) &&
e.A == record.A &&
e.B == record.B &&
e.C == record.C)
.Sum(e => e.Amount)
}
但是,它没有返回我想要的结果,而且我不知道如何在计算后将其保存回列表中。
最佳答案
如果您没有从 Sum
运算中获得正确的结果,可能是由于 Contains
方法返回了您不想要的记录(因为 10000 包含例如 1000)。处理该问题的一种方法是在检查值的开头、中间和结尾时添加句点。
另一个问题如前面的答案所述 - 您需要设置记录的 TotalAmount
属性(假设有一个):
foreach (var record in list)
{
record.TotalAmount = list
.Where(e =>
(e.Path.StartsWith($"{record.No}.") ||
e.Path.Contains($".{record.No}.") ||
e.Path.EndsWith($".{record.No}")) &&
e.A == record.A &&
e.B == record.B &&
e.C == record.C)
.Sum(e => e.Amount)
}
关于c# - 根据过滤列表计算列表中每条记录的总计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67232819/