簡體   English   中英

如果任何列值為空,則刪除數據表行 c#

[英]Remove datatable row if any column value is empty c#

即使數據表中的任何列具有空值,我也需要從數據表中刪除該行。

例如:

我的數據表有兩列

 Value     Input
  Dep     Phase 1
  Sec     
  Div     Phase 2

結果

 Value     Input
  Dep     Phase 1
  Div     Phase 2

我想刪除第二行,因為輸入列有空值。 我堅持使用以下代碼。

dtTable = dtTable.Rows.Cast<DataRow>()
          .Where(row => !row.ItemArray.All(field => field is DBNull || string.IsNullOrWhiteSpace(field as string))).
          .CopyToDataTable();

誰能建議我如何實現這一目標?

根據您提到的要求,您需要使用Any來檢查是否至少列具有null值或空字符串,它會過濾掉該行。 所以,喜歡:

row => !row.ItemArray.Any(field => field is DBNull || 
                                string.IsNullOrWhiteSpace(field as string))

編輯:

如果您的所有列都是string類型,那么上面的代碼可以正常工作,否則您需要通過調用ToString()將其顯式轉換為字符串:

row => !row.ItemArray.Any(field => field is DBNull || 
                                string.IsNullOrWhiteSpace(field.ToString()))

現在,這將只返回每一列都具有值的那些行。

如果可以使用for循環。 我們可以檢查每一行和每一列是否有空值

    for (int i = dt.Rows.Count - 1; i >= 0; i--)
    {

      if (dt.Rows[i]["col1"] == DBNull.Value || dt.Rows[i]["col2"] == DBNull.Value)
      {
           dt.Rows[i].Delete();
      }
    }

試試這個:

for (int i = dt.Rows.Count - 1; i >= 0; i--)
    {
    if (dt.Rows[i]["Column2"].ToString() == "")
        {
            dt.Rows[i].Delete();
            dt.AcceptChanges();
        }
    }
 for (int i = dt.Rows.Count - 1; i >= 0; i--)
                {
                    if (dt.Rows[i][1] == DBNull.Value)
                    {
                        dt.Rows[i].Delete();
                    }
                }
                dt.AcceptChanges();

它刪除數據表中的空行

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM