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);
}