.net C#中基于字符的DataTable拆分列值

wixjitnu  于 2023-05-08  发布在  .NET
关注(0)|答案(1)|浏览(176)

我想像下面这样拆分一个datatable的列

Message
--------
PR-111: test message
PR-112 - test message new
PR-113 : test message new2

它应该像下面这样拆分成一个datatable

PRNumber    Message
------  -----------
PR-111  test message
PR-112  test message new
PR-113  test message new2

注意:在以下项之前和之后可能有空格:或─
我已经尝试了下面,但没有给出适当的结果

var r = dt1.AsEnumerable().Select(g => new {
           
            PRNumber = g["Message"].ToString().Contains(":") == true ? g["Message"].ToString().Split(':')[0] : g["Message"].ToString().Split('-')[0],
            Message = g["Message"].ToString().Contains(":") == true ? g["Message"].ToString().Split(':')[0] : g["Message"].ToString().Split('-')[1]
        }).ToList();

有人能帮忙吗?

bzzcjhmw

bzzcjhmw1#

因为你想创建一个包含两列的DataTable,你应该先创建它:

DataTable dt2 = new DataTable();
dt2.Columns.Add("PRNumber");
dt2.Columns.Add("Message");

现在一个简单的foreach是填充它的最佳方法,LINQ不能帮助你:

foreach(DataRow row in dt1.Rows)
{
    string message = row.Field<string>("Message");
    // now use String.Split with two delimiter stings including the spaces
    string[] cols = message.Split(new[]{" : ", " - "}, StringSplitOptions.None);
    dt2.Rows.Add(cols.First().Trim(), cols.Last().Trim());
}

相关问题