C# 如果任何列值为空,则删除datatable行#
我需要从datatable中删除该行,即使datatable中的任何列都有空值 例如: 我的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
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
notAll
@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();
}
}