Если вы создаете Dictionary
для сопоставления строк риска с целыми числами, вы можете просто обрабатывать каждую строку в DataTable
для обновления столбца.
Сначала вычислите карту:
var RiskValue = "AAA".AsSingleton()
.Concat(new[] { "AA", "A", "BBB", "BB", "B", "CCC" }.SelectMany(r => new[] { "+", "", "-" }.Select(suffix => r + suffix)))
.Concat(new[] { "CC", "C", "D" })
.Select((r, v) => new { r, v })
.ToDictionary(rv => rv.r, rv => rv.v);
Затем обновите столбец разницы значениями:
foreach (var r in dt.AsEnumerable())
r["Risk Difference"] = RiskValue[r.Field<string>("Current risk")] - RiskValue[r.Field<string>("Forward risk")];
PS При вычислении моей карты используется расширение для преобразования объекта в IEnumerable<T>
, но вы также можете использовать new[] { object }
.
public static IEnumerable<T> AsSingleton<T>(this T first) {
yield return first;
}