Trim DataTable 的所有单元格
Trim All Cells of a DataTable
我有一个使用 SQL 查询填充的 DataTable
。如果此 DataTable
的值不是 trimmed(从左和右),程序将无法找到正确的匹配项。所以我正在寻找一个有效的 LINQ 查询(不是两个嵌套的 foreach
语句)到 trim DataTable
中的所有值和 return 它的一个干净版本。
最有效的方法是在数据库中执行此操作,f.e.:
SELECT RTRIM(LTRIM(ColumnName)) AS TrimmedColumn FROM TableName
如果必须使用 C# 执行此操作,最高效的方法是简单循环(LINQ 也使用循环):
DataColumn[] stringColumns = table.Columns.Cast<DataColumn>()
.Where(c => c.DataType == typeof(string))
.ToArray();
foreach(DataRow row in table.Rows)
foreach(DataColumn col in stringColumns)
row.SetField<string>(col, row.Field<string>(col).Trim());
一般来说,不要使用 LINQ 来修改 源代码。查询不应引起副作用。
我不确定您是否可以在数据表上应用 LINQ Select 语句并在字符串 class 上使用 Trim() 来实现您的目标。但作为数据库开发人员,我建议对 SQL 查询采取行动,并在查询中使用 Rtrim(Ltrim(field1)) AS field1 以消除数据表之前的空格。
数据表的扩展方法:
public static void trimData(DataTable dt)
{
foreach (DataColumn c in dt.Columns)
if (c.DataType == typeof(string))
foreach (DataRow r in dt.Rows)
try
{
r[c.ColumnName] = r[c.ColumnName].ToString().Trim();
}
catch
{ }
}
数据集:
public static void trimData(DataSet ds)
{
foreach (DataTable t in ds.Tables)
trimData(t);
}
我有一个使用 SQL 查询填充的 DataTable
。如果此 DataTable
的值不是 trimmed(从左和右),程序将无法找到正确的匹配项。所以我正在寻找一个有效的 LINQ 查询(不是两个嵌套的 foreach
语句)到 trim DataTable
中的所有值和 return 它的一个干净版本。
最有效的方法是在数据库中执行此操作,f.e.:
SELECT RTRIM(LTRIM(ColumnName)) AS TrimmedColumn FROM TableName
如果必须使用 C# 执行此操作,最高效的方法是简单循环(LINQ 也使用循环):
DataColumn[] stringColumns = table.Columns.Cast<DataColumn>()
.Where(c => c.DataType == typeof(string))
.ToArray();
foreach(DataRow row in table.Rows)
foreach(DataColumn col in stringColumns)
row.SetField<string>(col, row.Field<string>(col).Trim());
一般来说,不要使用 LINQ 来修改 源代码。查询不应引起副作用。
我不确定您是否可以在数据表上应用 LINQ Select 语句并在字符串 class 上使用 Trim() 来实现您的目标。但作为数据库开发人员,我建议对 SQL 查询采取行动,并在查询中使用 Rtrim(Ltrim(field1)) AS field1 以消除数据表之前的空格。
数据表的扩展方法:
public static void trimData(DataTable dt)
{
foreach (DataColumn c in dt.Columns)
if (c.DataType == typeof(string))
foreach (DataRow r in dt.Rows)
try
{
r[c.ColumnName] = r[c.ColumnName].ToString().Trim();
}
catch
{ }
}
数据集:
public static void trimData(DataSet ds)
{
foreach (DataTable t in ds.Tables)
trimData(t);
}