如何处理通过 LINQ 筛选的数据表的"subset"?



假设我有一个带有颜色列的表。颜色可以具有各种值。我有一个 C# 方法,可以一次处理给定列的项目。因此,我想:

foreach(colorname in mytable.getDistinctColornames)
   monocolorMethod(mytable.getSubTableOnlyContainingRowsWithColor(colorname))

我该如何优雅地做到这一点...?

无论如何,我都会避免来回复制数据。我想要对数据表的某种看法。一个只会"显示"给定列的行的视图和一个"可写"视图(即当我写入过滤的子集时,原始表被写入)

编辑:

假设我有一个"汽车"表,我想将所有

汽车的"类型"列中的"轿车"替换为"卡车",并用"颜色=红色"。

给定以下代码,我将如何做?

DataTable cars (...); // the data
DataView dv = cars.DefaultView;
dv.RowFilter = "Color='Red'";

<在这里,我想循环使用DataView>。以下代码不起作用:

foreach (row in dv.AsEnumerable)
{
  if(row["Type"] == "Sedan")
    row["Type"] = "Truck";
}

编辑 2 :

发现这个 http://msdn.microsoft.com/fr-fr/library/system.data.dataview.allowedit.aspx 建议

view.AllowEdit = true;
view[0].BeginEdit();
view[0]["FirstName"] = "Mary";
view[0]["LastName"] = "Jones";
view[0].EndEdit();

看看这个:

查询数据集 – LINQ to DataSet 简介

你试过使用DataView类吗?它看起来正是您希望在不使用 LINQ: 的情况下实现的目标:http://msdn.microsoft.com/en-us/library/fdcwwhez

用法示例:

假设有一个名为 _dtDataTable对象,其中有 4 行:

_dt = new DataTable("") {Columns = {new DataColumn("ID"), new DataColumn("Name"), new DataColumn("Order")}};
_dt.Rows.Add(1, "one", 1);
_dt.Rows.Add(2, "two", 3);
_dt.Rows.Add(3, "three", 2);
_dt.Rows.Add(4, "four", 5);

您可以轻松创建不过滤数据但对其执行排序操作的 DataView:

_dv = new DataView(_dt, "", "Order, Name", DataViewRowState.CurrentRows);

您还可以将新行添加到DataView中,并且由于它是在相应的DataTable上设置的,因此新行将直接添加到_dt对象中。排序顺序也将更新,新行不会是DataView中的最后一个行(因为排序是在"顺序"和"名称"列上完成的)

var newRow = _dv.AddNew();
newRow["ID"] = 5;
newRow["Name"] = "five";
newRow["Order"] = 4;
newRow.EndEdit();

在该代码之后,_dt将有 5 行。编辑行也非常简单:

var editedRow = _dv[0];
editedRow.BeginEdit();
editedRow["Name"] = "Test";
editedRow.EndEdit();

您还可以使用 DataView.Find()DataView.FindRows() 方法在DataView中查找行。

相关内容

  • 没有找到相关文章

最新更新