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行。
答案 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("<<", "<").Replace(">>", ">"));
另请注意,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("<<", "<").Replace(">>", ">"));
}
oDSetTest.AcceptChanges();