使用LINQ替换数据集中的行值

时间:2013-11-01 07:23:47

标签: c# .net linq

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

我想替换“&lt;&lt;”和“&gt;&gt;”在数据集中使用LINQ分别使用值“&amp;#60”和“&amp;#62”。我不想循环数据集,因为在真实场景中有超过1000行。

2 个答案:

答案 0 :(得分: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用于查询,而不是用于修改。它可以帮助您选择要修改的数据。然后你应该使用循环来修改将通过查询选择的数据。

答案 1 :(得分: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();