【发布时间】:2020-04-03 13:26:50
【问题描述】:
假设我正在调用 API 端点并以 DataTable 的形式获取一些汇率。然后我使用 LINQ 语句过滤这些汇率,只返回我感兴趣的汇率。
用于过滤汇率的 LINQ:
var results = exchangeRates.Rows.Cast<DataRow>()
.Where(r => r.Field<double>("Rate") > 0)
.Where(r => r.Field<string>("FromCurrency").ToUpper() == "USD")
.Select(y => new
{
FromCurrency = y.Field<string>("FromCurrency"),
ToCurrency = y.Field<string>("ToCurrency"),
ExchangeRate = y.Field<double>("Rate")
}).ToList();
LINQ 语句返回:
+------------------+----------------+---------+
| OriginalCurrency | TargetCurrency | Rate |
+------------------+----------------+---------+
| USD | GBP | 88.452 |
+------------------+----------------+---------+
| USD | CAD | 132.819 |
+------------------+----------------+---------+
我想在结果记录中添加互惠汇率。因此,如果我的美元兑英镑汇率为 88.45,我想添加一条英镑兑美元汇率为 113.06 的记录。所以基本上我交换 OriginalCurrency 和 TargetCurrency 列,取第一个汇率的倒数,然后乘以 10,000。我有 LINQ 来过滤记录,但不知道如何调整 LINQ 语句以添加两个新的相互汇率记录。
所需的 LINQ 语句返回:
+------------------+----------------+--------+
| OriginalCurrency | TargetCurrency | Rate |
+------------------+----------------+--------+
| USD | GBP | 88.45 |
+------------------+----------------+--------+
| USD | CAD | 132.81 |
+------------------+----------------+--------+
| GBP | USD | 113.06 |
+------------------+----------------+--------+
| CAD | USD | 75.30 |
+------------------+----------------+--------+
【问题讨论】: