使用非強型 DataSet 時,含 Expression 列的 DataTable 可先 Fill 再加入運算列再繫結,提升效能。但強型 DataSet 已預先定義運算列,需另闢蹊徑。
DataTable.Columns,將 Expression 非空的列名與運算式存入 Hashtable,並將 Expression 設為空字串。TableAdapter.Fill。Hashtable 含鍵值,恢復 Expression,最後清空 Hashtable。Hashtable exprKey = new Hashtable();
for (int i = 0; i < targetTable.Columns.Count; i++) {
if (targetTable.Columns[i].Expression != string.Empty) {
exprKey.Add(targetTable.Columns[i].ColumnName, targetTable.Columns[i].Expression);
targetTable.Columns[i].Expression = string.Empty;
}
}
tableAdapter.Fill(targetTable);
for (int i = 0; i < targetTable.Columns.Count; i++) {
if (exprKey.ContainsKey(targetTable.Columns[i].ColumnName)) {
targetTable.Columns[i].Expression = (string)exprKey[targetTable.Columns[i].ColumnName];
}
}
exprKey.Clear();
使用 Northwind Order Details 表(約 2000 筆),加入 ItemTotal = UnitPrice * Quantity 運算列。測試效能提升約 30%。
