使用 `DataTable.Select("FilterExpression")` 時,若欄位名稱為純數字(如 "2023"、"123"),直接寫入條件會被視為數值常數而非欄位名,導致語法錯誤或邏輯錯誤。
與 SQL Server 相同,`DataTable.Select` 的運算式語法支援以 `[ ]` 包裹識別碼:
// 錯誤寫法
var rows = dt.Select("2023 > 100"); // 視為數值比較
// 正確寫法
var rows = dt.Select("[2023] > 100"); // 明確指定欄位名
DataTable dt = new DataTable();
dt.Columns.Add("2023", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Rows.Add(150, "ItemA");
dt.Rows.Add(80, "ItemB");
// 正確篩選
DataRow[] result = dt.Select("[2023] > 100");
// result 僅包含 ItemA
同樣適用於包含空格、關鍵字、特殊符號的欄位名:
string colName = "2023"; // 可能來自變數
string filter = $"[{colName}] > 100";
DataRow[] rows = dt.Select(filter);
嘗試用雙引號、單引號或反引號包裹欄位名均無效,唯有方括號 `[ ]` 為 `DataTable.Select` 運算式語法規定的識別碼分隔符。