首页 > 解决方案 > 无法删除此列,因为它是表达式的一部分

问题描述

我有一个数据表,我通过将新列名添加为 MASKEDSSN 来屏蔽一列。它已被掩盖。但我需要删除旧列名 SSN。删除它时会引发错误

无法删除此列,因为它是表达式的一部分:MaskedSSN = 'XXX-XX-'+SUBSTRING(CONVERT(SSN, System.String),6,4)。

代码:

 DataTable employeeTable = new DataTable();
 employeeTable.Rows.Add("123455789");
 employeeTable.Rows.Add("123447789");
 employeeTable.Rows.Add("823456719");
 employeeTable.Columns.Add("SSN");

 int index = employeeTable.Columns["SSN"].Ordinal;
 employeeTable.Columns.Add("MaskedSSN", typeof(string));
 employeeTable.Columns["MaskedSSN"].Expression = "'XXX-XX- 
     '+SUBSTRING(CONVERT(SSN, System.String),6,4)";
 DataTable newsss = new DataTable();

 newsss = employeeTable.Copy();
 newsss.AcceptChanges();
 newsss.Columns.RemoveAt(index);
 newsss.Columns.Remove("SSN");

标签: c#

解决方案


您正在使用表达式语法来构建 MaskedSSN

employeeTable.Columns["MaskedSSN"].Expression = "'XXX-XX- 
 '+SUBSTRING(CONVERT(SSN, System.String),6,4)";

如果您使用 AddRow 手动进行屏蔽,您可以删除旧的 SSN 列。

编辑

Func<string, string> MaskingFnc = (string ssnParam) => string.Format("XXX-XX-{0}", ssnParam.Substring(4,6));

DataTable employeeTable = new DataTable();
employeeTable.Columns.Add("SSN")
employeeTable.Columns.Add("SSNMasked")
employeeTable.Rows.Add("123455789", MaskingFnc("123455789"));
employeeTable.Rows.Add("123447789", MaskingFnc("123447789"));
employeeTable.Rows.Add("823456719", MaskingFnc("823456719"));

推荐阅读