【问题标题】:manipulate string data tabel content [closed]操作字符串数据表内容[关闭]
【发布时间】:2014-06-05 18:52:35
【问题描述】:

我有一个数据表,其中一些列有逗号分隔的字符串,单词之间没有空格,它们之间有逗号(abc,def)。你能告诉我如何在每个逗号(abc,def)之后添加一个空格,而不是遍历每一行(Linq?)吗?列可以有一个或根本没有字符串。 谢谢。

【问题讨论】:

  • 你有没有尝试过?
  • foreach (dt.rows 中的数据行 dr) dr["some_column"] = dr["some_column"].ToString().Replace(",", ", ");我认为应该有一个更清晰、类似 Linq 的语句来做同样的事情,而不是循环。
  • 不知道为什么这个题外话。它是关于 C#、数据表列操作和(可能)Linq。

标签: c# datatable .net-3.5


【解决方案1】:
using System.Threading.Tasks;

public static void Main()
{
            var table = new DataTable("MyTable");
            table.Columns.Add("Col1", typeof(string));
            table.Rows.Add("abc,def");
            table.Rows.Add("ghi,jkl");

            Parallel.ForEach(table.AsEnumerable(), (row => row.SetField("Col1", row.Field<string>("Col1").Replace(",", ", "))));    
}

对于 .NET 3.5,您可以申请 List ForEach 实现:

new List<DataRow>(table.AsEnumerable()).ForEach(row => row.SetField("Col1", row.Field<string>("Col1").Replace(",", ", ")));

或者更好,定义扩展方法:

public static class IEnumerableExtensions
{
    public static void ForEach<T>(this IEnumerable<T> source, Action<T> action)
    {
        foreach (var item in source)
            action(item);            
    }
}

然后:

table.AsEnumerable().ForEach(row => row.SetField("Col1", row.Field<string>("Col1").Replace(",", ", ")));

【讨论】:

  • 感谢您的回复。我正在使用.Net 3.5;我相信 System.Threading.Tasks 是 4.5。
  • 查看 .Net 3.5 的更新答案
【解决方案2】:

您可以运行包含更新语句的SqlCommand,例如:

UPDATE table SET column = REPLACE(column, ',', ', ');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-27
    • 2019-03-25
    • 2016-06-21
    • 1970-01-01
    • 2016-02-03
    • 2016-06-29
    • 2016-12-20
    • 1970-01-01
    相关资源
    最近更新 更多