C# 如果任何列值为空,则删除datatable行#

C# 如果任何列值为空,则删除datatable行#,c#,asp.net,.net,linq,datatable,C#,Asp.net,.net,Linq,Datatable,我需要从datatable中删除该行,即使datatable中的任何列都有空值 例如: 我的datatable有两列 Value Input Dep Phase 1 Sec Div Phase 2 结果 Value Input Dep Phase 1 Div Phase 2 我想删除第二行,因为输入列的值为空。我被下面的代码卡住了 dtTable = dtTable.Rows.Cast<DataRow&g

我需要从datatable中删除该行,即使datatable中的任何列都有空值

例如:

我的datatable有两列

 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();
dtTable=dtTable.Rows.Cast()
.Where(row=>!row.ItemArray.All(field=>field是DBNull | | string.IsNullOrWhiteSpace(fieldas string)))。
.CopyToDataTable();

有人能告诉我如何实现这一点吗?

根据您提到的要求,您需要使用
Any
,它将检查是否至少列具有
null
值或空字符串,它将过滤掉该行。所以,你喜欢:

row => !row.ItemArray.Any(field => field is DBNull || 
                                string.IsNullOrWhiteSpace(field as string))
编辑: 如果您的所有列都是
string
类型,则上述代码可以正常工作,否则需要通过调用
ToString()
将其显式转换为string:


现在,这将只返回每列中都有值的行。

如果可以使用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();
        }
    }

您面临的问题是什么?您需要
Any
not
All
@RahulAgarwal-即使行中的任何列都有空值,我也无法删除行。如果列不是字符串怎么办?那么我们需要做一些工作来检查确切的类型,或者我们可以通过
.ToString()
@Alexey将其转换为字符串,null应转换为空字符串,然后在trim()函数之后检查该字符串的长度是否为零?仅代码的答案并没有特别的帮助。请添加一些关于此代码如何解决问题的描述。
for (int i = dt.Rows.Count - 1; i >= 0; i--)
    {
    if (dt.Rows[i]["Column2"].ToString() == "")
        {
            dt.Rows[i].Delete();
            dt.AcceptChanges();
        }
    }