从c#中的数据集中删除数据表

时间:2014-02-10 12:24:46

标签: c# datatable dataset

在c#中,如果数据表的所有值都为零,我想从数据集中删除数据表。

如何实现上述功能

我正在使用此代码将值添加到datatable

for (int row = startRowParcel + 1; row <= endRowParcel; row++) {
    List<string> rateRow = new List<string>();

    for (int col = startColumnNsa; col <= endColumnNsa; col++) {
        if (Convert.ToString(ws.Cells[row, col].Value) == null)
            rateRow.Add("0");
        else if (Convert.ToString(ws.Cells[row, col].Value) == "1/2")
            rateRow.Add("0.5");
        else
            rateRow.Add(Convert.ToString(ws.Cells[row, col].Value));
    }

    tbPriority.Rows.Add(rateRow.ToArray());
}   

提前感谢。

4 个答案:

答案 0 :(得分:1)

您可以使用以下代码实现此目的:

     for(int i=0;i<dt.rows.count;i++)
    {
          for(intj=0;j<=dt.columns.count;j++)
            {

             if( dt.rows[i][j]!=0)
            {
                 flag=1;
                 break;
              }

             }
    }

    if(flag==1)
    {
       // dont remove the table
    }

    else
    {

     ds.tables.remove(dt);
    }

}

遍历该数据表,检查非零值,如果全部为零则删除它,否则

希望这会有所帮助..

答案 1 :(得分:1)

此LINQ方法查找所有行的字段为"0"的所有表:

var allZeroTables = dsPriorities.Tables.Cast<DataTable>()
    .Where(tbl => tbl.AsEnumerable()
        .All(r => tbl.Columns.Cast<DataColumn>()
            .All(c => r.Field<string>(c) == "0")));
foreach (DataTable zeroTable in allZeroTables.ToList())
    dsPriorities.Tables.Remove(zeroTable);

Enumerable.All是一种短路方法,在第一次不匹配时停止。

请注意,ToList()是必需的,因为您无法在DataSet内修改DataTableCollection的{​​{1}}而无需创建新的收藏。

答案 2 :(得分:0)

if (!(dt.AsEnumerable().Any(x => x.Field<double>("nameOfColumn") != 0)) {
    //delete data table
}

有关详细信息,请参阅LINQ query on a DataTable

答案 3 :(得分:0)

for (int row = startRowParcel + 1; row <= endRowParcel; row++) {
    List<string> rateRow = new List<string>();

    for (int col = startColumnNsa; col <= endColumnNsa; col++) {
        if (Convert.ToString(ws.Cells[row, col].Value) == null)
            rateRow.Add("0");
        else if (Convert.ToString(ws.Cells[row, col].Value) == "1/2")
            rateRow.Add("0.5");
        else
            rateRow.Add(Convert.ToString(ws.Cells[row, col].Value));
    }

    if (rateRow.Any(x=> x != "0"))
    tbPriority.Rows.Add(rateRow.ToArray());
} 
//Then you can check if tbPriority has any rows if it doesn't then remove it from the dataset
if (!tbPriority.Rows.Any())
    // delete dataTable

如果rateRow包含除“0”以外的任何值,则会添加行。