我想通过过滤现有的DataView来创建一个新的DataView,但是由于DataView没有.AsEnumerable()方法,并且没有实现IEnumerable{DataRow},所以我遇到了麻烦。
以下是我想要完成的基本任务:
//Some table.
DataTable dt = new DataTable();
//Somewhere in here the table is given columns and rows...
//The first view shows some subset of the table.
//(This works fine.)
DataView dv1 = dt.AsEnumerable()
.Where(r => r.Field<int>("ID") < 1000)
.AsDataView();
//The second view should show a subset of the first view, but I cannot find the methods to do this.
//(This does not compile.)
DataView dv2 = dv1.AsEnumerable()
.Where(r => r.Field<int>("Salary") > 50000)
.AsDataView();到目前为止,我想出的最好的办法是
DataView dv2 = dv1.ToDataTable().AsEnumerable()
.Where(r => r.Field<int>("Salary") > 50000)
.AsDataView();很丑,我猜是低效的。
什么是从视野中观看风景的最佳方法?
发布于 2015-08-24 21:41:35
在单独的IEnumerable中创建第一个筛选器,然后使用它创建两个数据视图:
var filtered = dt.AsEnumerable()
.Where(r => r.Field<int>("ID") < 1000);
DataView dv1 = filtered.AsDataView();
DataView dv2 = filtered.Where(r => r.Field<string>("Salary") > 50000)
.AsDataView();发布于 2022-08-02 12:24:21
创建第一个DataTable而不是添加列,而不是添加和修改数据。在应用DataViewRowState筛选get第一次DataView之后,比删除更少的重新编码获得第二次DataView:
DataTable dataTable = new DataTable("dataTable");
DataColumn dataColumn = new DataColumn("dataColumn");
dataTable.Columns.Add(dataColumn);
DataRow dataRow;
for (int i = 0; i <= 10 - 1; i++)
{
dataRow = dataTable.NewRow();
dataRow["dataColumn"] = "item " + i;
dataTable.Rows.Add(dataRow);
}
dataTable.AcceptChanges();
DataView dataView = new DataView(dataTable);
dataView = dataTable.DefaultView;
dataTable.Rows[1]["dataColumn"] = "Hello";
dataRow = dataTable.NewRow();
dataRow["dataColumn"] = "World";
dataTable.Rows.Add(dataRow);
dataView.RowStateFilter = DataViewRowState.Added | DataViewRowState.ModifiedCurrent;
DataView dataView1 = dataView.ToTable().DefaultView; //1st View
dataView.RowStateFilter = DataViewRowState.ModifiedOriginal;
dataTable.Rows[1].Delete();
dataTable.Rows[2].Delete();
dataTable.Rows[3].Delete();
dataView.RowStateFilter = DataViewRowState.Deleted;
DataView dataView2 = dataView.ToTable().DefaultView; //2nd Viewhttps://stackoverflow.com/questions/32192144
复制相似问题