0
    DataSet oDSetTest = new DataSet();
    DataTable oT2 = new DataTable();

    oT2.TableName = "Test";
    oT2.Columns.Add("ID", typeof(int));
    oT2.Columns.Add("Age", typeof(int));
    oT2.Columns.Add("Exp", typeof(int));
    oT2.Columns.Add("Data", typeof(string));

    oT2.PrimaryKey = new DataColumn[] { oT2.Columns["ID"] };
    oT2.AcceptChanges();

    oT2.Rows.Add(1, 25, 3,"<<AS>>");
    oT2.Rows.Add(2, 27, 6);
    oT2.Rows.Add(3, 25, 3, "BC");

    oDSetTest.Tables.Add(oT2);
    oDSetTest.AcceptChanges();

我想分别使用 LINQ 使用值“<”和“>”替换数据集中的“<<”和“>>”。我不想循环数据集,因为在真实场景中有超过 1000 行。

4

2 回答 2

2

使用 LINQ 无法避免循环。但这里是 LINQ 解决方案:

var rowsToUpdate = from r in oT2.AsEnumerable()
                   let data = r.Field<string>("Data")
                   where data != null && 
                         (data.Contains("<<") || data.Contains(">>"))
                   select r;

foreach (var row in rowsToUpdate)
    row.SetField("Data", row.Field<string>("Data")
                            .Replace("<<", "&#60").Replace(">>", "&#62"));

还要记住,LINQ 是用于查询,而不是用于修改。它可以帮助您选择要修改的数据。然后你应该使用循环来修改将被查询选择的数据。

于 2013-11-01T07:30:24.597 回答
0

也可以对归档的数据进行如下查询:

var rows = oDSetTest.Tables["Test"].Select("Data LIKE '%<<%' OR Data LIKE '%>>%'");
foreach (var row in rows)
{
    row.SetField("Data", row["Data"].ToString().Replace("<<", "&#60").Replace(">>", "&#62"));
}
oDSetTest.AcceptChanges();
于 2013-11-01T07:43:13.220 回答