使用linq

时间:2015-09-21 07:47:37

标签: c# .net linq visual-studio datatable

我有一个包含许多dataTable的数据集。

数据表如下所示,

   column1  column2 column3  Name
     NA        NA      NA    Ivan

现在我想删除数据集中行值为“NA”的所有数据表中的列。

如果可能,如何使用Linq执行此操作?

2 个答案:

答案 0 :(得分:1)

您可以通过方法删除从collecion中删除列,而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);

答案 1 :(得分:0)

我猜你真的想删除所有行的所有字符串列,其中所有行的所有值都是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);
}