【问题标题】:Remove rows from DataTable that do not exist in a list从 DataTable 中删除列表中不存在的行
【发布时间】:2019-04-04 16:20:15
【问题描述】:

我有一个包含列名的动态列表

 var newList = new List<string>(){ "ColName1", "ColName2", "ColName3", "ColName4" };

我还有一个包含这些列名的数据表。但是,此数据表需要与我的列表匹配,因此如果此数据表中的列在列表中不存在,则需要将其删除。我怎样才能做到这一点?到目前为止,这就是我所拥有的

      DataTable sourceData = new DataTable();
      List<DataRow> rowsToDelete = new List<DataRow>();

                foreach (DataRow row in sourceData.Rows)
                {
                    if (!newList.Contains(row[""].ToString())) //Errors here as the names cannot be hardcoded. It needs to be dynamic
                    {
                        rowsToDelete.Add(row);
                    }
                }

                foreach (DataRow row in rowsToDelete)
                {
                    sourceData.Rows.Remove(row);
                }

                sourceData.AcceptChanges();

【问题讨论】:

    标签: c# list entity-framework datatable


    【解决方案1】:

    我不确定您为什么要检查 DataRow 上是否存在列,它们是在 DataTable 上定义的,但这会起作用:

    if (row.Table.Columns.Cast<DataColumn>().Any(x => !newList.Contains(x.ColumnName)))
    {
        rowsToDelete.Add(row);
    }
    

    【讨论】:

      【解决方案2】:

      您可以像这样简单地删除它们:

      foreach(string col in newList)
          if(sourceData.Columns.Contains(col))
               sourceData.Columns.Remove(col);
      

      但是,最好不要一开始就将它们包含在您的查询中:

      string query = $"select {string.Join(",", newList)} from someTable";
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-06-13
        • 2016-07-31
        • 2010-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多