使用 linq 根据 where 条件从 DataTable 中删除一列
Remove a column from DataTable based on a where condition using linq
我有一个包含许多数据表的数据集。
数据表如下所示,
column1 column2 column3 Name
NA NA NA Ivan
现在我想从数据集中所有数据表中删除行值为 'NA' 的列。
如果可能,我如何使用 Linq 执行此操作?
您可以通过Remove方法从集合中删除列,而linq只能帮助您找到所需的列。
找到所需的列,然后将其删除。
var dt = new DataTable();
List<DataColumn> delete = new List<DataColumn>();
foreach (DataRow row in dt.Rows)
foreach (DataColumn col in dt.Columns)
if (row[col]?.ToString() == "NA" && !delete.Contains(col))
delete.Add(col);
foreach (var col in delete)
dt.Columns.Remove(col);
我猜您实际上想删除所有表的所有字符串列,其中所有行的所有值都是 NA
(或 na
)。然后这按预期工作:
foreach (DataTable table in ds.Tables)
{
List<DataColumn> stringColumns = table.Columns.Cast<DataColumn>()
.Where(c => c.DataType == typeof(string))
.ToList();
var columnsAllNotAvailable = stringColumns
.Where(c => table.AsEnumerable()
.All(r => String.Equals(r.Field<string>(c), "NA", StringComparison.InvariantCultureIgnoreCase)));
foreach(DataColumn col in columnsAllNotAvailable)
table.Columns.Remove(col);
}
我有一个包含许多数据表的数据集。
数据表如下所示,
column1 column2 column3 Name
NA NA NA Ivan
现在我想从数据集中所有数据表中删除行值为 'NA' 的列。
如果可能,我如何使用 Linq 执行此操作?
您可以通过Remove方法从集合中删除列,而linq只能帮助您找到所需的列。 找到所需的列,然后将其删除。
var dt = new DataTable();
List<DataColumn> delete = new List<DataColumn>();
foreach (DataRow row in dt.Rows)
foreach (DataColumn col in dt.Columns)
if (row[col]?.ToString() == "NA" && !delete.Contains(col))
delete.Add(col);
foreach (var col in delete)
dt.Columns.Remove(col);
我猜您实际上想删除所有表的所有字符串列,其中所有行的所有值都是 NA
(或 na
)。然后这按预期工作:
foreach (DataTable table in ds.Tables)
{
List<DataColumn> stringColumns = table.Columns.Cast<DataColumn>()
.Where(c => c.DataType == typeof(string))
.ToList();
var columnsAllNotAvailable = stringColumns
.Where(c => table.AsEnumerable()
.All(r => String.Equals(r.Field<string>(c), "NA", StringComparison.InvariantCultureIgnoreCase)));
foreach(DataColumn col in columnsAllNotAvailable)
table.Columns.Remove(col);
}