c# - 当按日期净值的总值为零时如何从列表中删除
问题描述
我有一个 C# 交易列表
public class Transaction
{
public string effectiveDate;
public string transactionType;
public double grossAmount;
public double netAmount;
}
不同的事务类型存储在不同的列表中,这些列表填充了从数据库中提取数据。最后,它会吐出一份逐项交易的声明。
假设我在每月 15 日支付了每月 1.50 美元的管理费。2 月免收手续费,我有一笔冲销交易。所以现在在我的列表中我有
'2020-01-15', 'Admin fee', 1.5, 1.5
'2020-02-15', 'Admin fee', 1.5, 1.5
'2020-02-15', 'Admin fee', -1.5, -1.5
'2020-03-15', 'Admin fee', 1.5, 1.5
如果 2 月的管理费净额为零,我该如何删除或跳过它们?
在其他情况下,我可能在同一天有 10 笔或更多相同类型的交易被撤销,即收到 10 笔付款并在同一生效日期撤销。
是否按日期排序,迭代并保持运行总值,直到我到达一个新日期,然后比较为零最简单/最好的方法?
我知道通过 sum <> 0 在 SQL 中使用 group 更容易做到这一点,但是这些值作为带有 $ 和逗号以及前导尾随空格等的字符存储在数据库中,所以我不能那样做。由于各种原因,即使我替换/替换/替换/转换数据也不行。
谢谢
解决方案
你可以试试Linq,对于给定的列表,说
var myList = new List<Transaction>() {
new Transaction() {
effectiveDate = "2020-01-15",
transactionType = "Admin fee",
grossAmount = 1.5,
netAmount = 1.5},
new Transaction() {
effectiveDate = "2020-02-15",
transactionType = "Admin fee",
grossAmount = 1.5,
netAmount = 1.5},
new Transaction() {
effectiveDate = "2020-02-15",
transactionType = "Admin fee",
grossAmount = -1.5,
netAmount = -1.5},
new Transaction() {
effectiveDate = "2020-03-15",
transactionType = "Admin fee",
grossAmount = 1.5,
netAmount = 1.5},
};
你可以把 Linq 查询:
- 我们
GroupBy
与相同的交易effectiveDate
和transactionType
- 检查
Sum
ofnetAmount
是否不为0 - 展平(
SelectMany
后跟ToList
)组返回列表
代码:
using System.Linq;
...
myList = myList
.GroupBy(t => new { t.effectiveDate, t.transactionType })
.Where(group => group.Sum(t => t.netAmount) != 0)
.SelectMany(group => group)
.ToList();
推荐阅读
- projection - 合并事件存储中的两个流的投影
- algorithm - 从集合中寻找最佳匹配位图
- catboost - 如何在 CatBoostClassifier.fit() 之后获取评估指标?
- google-chrome - 在 chrome 扩展弹出窗口中运行 Flash
- python - Pythoncom 接口转换
- android - 来自JSON的Android ListView,字符串中有空格
- oracle - 在 Oracle 函数中传递逗号分隔列表作为参数
- javascript - 包装在 Tab 组件中时,Redux-form 字段数组无法按预期工作
- c# - 将 foreach 转换为 lambda
- node.js - 使用 npm start 时 app.listen 是什么样的