JobDetailID と CalculatedID の 2 つの列を持つ DataTable があります。JobDetailID は常に一意であるとは限りません。特定の JobDetailID の CalculatedID の 1 つまたは最初のインスタンスを JobDetailID + "A" にする必要があり、同じ JobDetailID を持つ行が複数ある場合は、連続する行を JobDetailID + "B"、"C" などにする必要があります。同じ JobDetailID を持つ行が 4 つまたは 5 つ以下であること。
現在、次のように実装していますが、許容できないほど遅いです。
private void AddCalculatedID(DataTable data)
{
var calculatedIDColumn = new DataColumn { DataType = typeof(string), ColumnName = "CalculatedID" };
data.Columns.Add(calculatedIDColumn);
data.Columns["CalculatedID"].SetOrdinal(0);
var enumerableData = data.AsEnumerable();
foreach (DataRow row in data.Rows)
{
var jobDetailID = row["JobDetailID"].ToString();
// Give calculated ID of JobDetailID + A, B, C, etc. for multiple rows with same JobDetailID
int x = 65; // ASCII value for A
string calculatedID = jobDetailID + (char)x;
while (string.IsNullOrEmpty(row["CalculatedID"].ToString()))
{
if ((enumerableData
.Any(r => r.Field<string>("CalculatedID") == calculatedID)))
{
calculatedID = jobDetailID + (char)x;
x++;
}
else
{
row["CalculatedID"] = calculatedID;
break;
}
}
}
}
この形式の出力に固執する必要があると仮定すると、このパフォーマンスをどのように改善できますか?