c# - 无法删除此列,因为它是表达式的一部分
问题描述
我有一个数据表,我通过将新列名添加为 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");
解决方案
您正在使用表达式语法来构建 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"));
推荐阅读
- r - 从 R 中的绘图中提取 Y 值
- kdb - KDB - 从服务器中清除函数、变量、表而不退出或重新启动服务
- python - 如何使用上一个/当前/下一个从列表中获取唯一值?
- html - Django 管理员 - 无法更改
- node.js - req.headers.cookie 未定义
- function - 柏树 | 有没有办法让“it”测试从最后一个“it”测试结束的地方开始?
- python - 遍历列表,如果在其他列表中找不到,则不返回
- jax-rs - 无法使用 JAX-RS Invocation Builder 调用带有表单参数的 API,返回 400 状态代码
- python - 如何在 Django 中创建模型后将模型分配给所有用户?
- javascript - 为什么这个简单的 JS 视频播放器不起作用?