pal*_*lak 6 c# datatable ado.net .net-2.0
如何将数据集中的数据过滤到数据表?喜欢代码 - >
DataRow[] dr = DS.Tables[0]
.Select("STAGENAME='Develop' AND DEVLAPSEDAYS IS NOT NULL");
Run Code Online (Sandbox Code Playgroud)
我如何在这里使用数据表?
以下代码并不反映变化 - >
DataTable FilteredDataD = DS.Tables[0];
if (FilteredDataD.Rows.Count > 0) {
FilteredDataD.DefaultView.RowFilter = "STAGENAME='Develop' AND DEVLAPSEDAYS IS NOT NULL";
FilteredDataD.DefaultView.ToTable();
}
Run Code Online (Sandbox Code Playgroud)
是否可以使用上面的过滤器删除列,例如"STAGENAME ='Develop'和DEVLAPSEDAYS IS NOT NULL"+ FilteredDataD.column("col_name")...假设我有5列只显示4,我不能删除我的查询中的col_name.有办法吗?
答复
Jam*_*son 11
尝试使用LINQ代替:
var table = DS.Tables[0].AsEnumerable().Where(
r => r.Field<string>("STAGENAME") == "Develop" && r.Field<int?>("DEVLAPSEDAYS").HasValue).AsDataView().ToTable();
Run Code Online (Sandbox Code Playgroud)
编辑改AsDataView到AsDataView()了语法准确性.
编辑提供了.NET 2.0兼容的解决方案
DataTable table = DS.Tables[0];
if (table.Rows.Count > 0)
{
table.DefaultView.RowFilter = "STAGENAME = 'DEVELOP' AND DEVLAPSEDAYS IS NOT NULL";
table = table.DefaultView.ToTable();
}
Run Code Online (Sandbox Code Playgroud)
您可以编写一个扩展方法(使用C#3),如下所示:
public static DataTable Filter(this DataTable dataTable, string selectFilter)
{
var filteredTable = dataTable.Clone();
var rows = dataTable.Select(selectFilter).ToList();
rows.ForEach(filteredTable.ImportRow);
return filteredTable;
}
Run Code Online (Sandbox Code Playgroud)
然后使用如下:
DataTable dataTable = DS.Tables[0]
.Filter("STAGENAME='Develop' AND DEVLAPSEDAYS IS NOT NULL");
Run Code Online (Sandbox Code Playgroud)
更新,因为你说你正在使用C#2.0(因此扩展方法和LINQ不是一个选项)你可以使用它:
public static DataTable GetFilteredTable(
DataTable sourceTable, string selectFilter)
{
var filteredTable = sourceTable.Clone();
var rows = sourceTable.Select(selectFilter);
foreach (DataRow row in rows)
{
filteredTable.ImportRow(row);
}
return filteredTable;
}
DataTable dataTable = GetFilteredTable(
DS.Tables[0], "STAGENAME='Develop' AND DEVLAPSEDAYS IS NOT NULL");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34818 次 |
| 最近记录: |