Предположим, что я звоню в конечную точку 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 и возьму обратную величину из первого курса, а затем умножу на 10000. У меня есть LINQ для фильтрации записей, но я не могу понять, как настроить оператор LINQ для добавления двух новых записей взаимного обменного курса.
Требуемый возврат оператора LINQ:
+------------------+----------------+--------+
| OriginalCurrency | TargetCurrency | Rate |
+------------------+----------------+--------+
| USD | GBP | 88.45 |
+------------------+----------------+--------+
| USD | CAD | 132.81 |
+------------------+----------------+--------+
| GBP | USD | 113.06 |
+------------------+----------------+--------+
| CAD | USD | 75.30 |
+------------------+----------------+--------+