如何编写DataColumn.Expression拆分DataTable中的经纬度列
解决DataTable计算列拆分带特殊字符列名的经纬度问题
问题出在你的列名包含空格和括号,DataTable的表达式解析器会把Location (Lat, Long)误判为函数调用,所以必须用**方括号[]**把完整列名包裹起来,明确告诉解析器这是一个列引用。
另外直接用固定长度的SUBSTRING不够灵活(比如经纬度位数变化时会出错),应该结合CHARINDEX找到逗号的位置,再截取对应部分,同时用TRIM去除多余空格。
修改后的代码如下:
private void CalcColumns() { DataTable table = new DataTable (); // Create the first column. DataColumn locationColumn = new DataColumn(); locationColumn.ColumnName = "Location (Lat, Long)"; locationColumn.DefaultValue = "40.00, -60.00"; // Create the second, calculated, column. DataColumn latColumn = new DataColumn(); latColumn.ColumnName = "Latitude"; // 截取逗号前的内容并去除空格 latColumn.Expression = "TRIM(SUBSTRING([Location (Lat, Long)], 1, CHARINDEX(',', [Location (Lat, Long)]) - 1))"; // Create third column. DataColumn longColumn = new DataColumn(); longColumn.ColumnName = "Longitude"; // 截取逗号后的内容并去除空格 longColumn.Expression = "TRIM(SUBSTRING([Location (Lat, Long)], CHARINDEX(',', [Location (Lat, Long)]) + 1, LEN([Location (Lat, Long)])))"; // Add columns to DataTable. table.Columns.Add(locationColumn); table.Columns.Add(latColumn); table.Columns.Add(longColumn); DataRow row = table.NewRow(); table.Rows.Add(row); DataView view = new DataView(table); dataGrid1.DataSource = view; }
表达式说明:
[Location (Lat, Long)]:用方括号包裹带特殊字符的列名,避免解析器误判CHARINDEX(',', [Location (Lat, Long)]):定位逗号在字符串中的位置- 纬度表达式:从字符串开头截取到逗号前一位,再用
TRIM去除前后空格 - 经度表达式:从逗号后一位截取到字符串末尾,再用
TRIM去除前后空格
这种写法适配任意位数的经纬度值(比如"39.123, -120.4567"),都能正确拆分出纬度和经度。
内容的提问来源于stack exchange,提问作者Jase99
相关产品推荐
相关产品推荐

