C# 从数据集中删除空行

C# 从数据集中删除空行,c#,datatable,dataset,C#,Datatable,Dataset,在上面的代码片段中,如何返回数据集,但排除所有空行,即所有列中包含null或空字符串的空行。您必须先进行检查,然后返回数据表,如下所示(示例) 您必须先进行检查,然后返回数据表,如下所示(示例) 这里有一个helper函数,在该函数中传递您想要删除所有空列的datarow的表(这里我假设所有字符串都是string类型的,那么它就可以工作了) 对于其他类型,u可以检查datacolumn类型,然后可以进行相关检查 for (int i = dt.Rows.Count - 1; i >= 0;

在上面的代码片段中,如何返回数据集,但排除所有空行,即所有列中包含null或空字符串的空行。

您必须先进行检查,然后返回数据表,如下所示(示例)


您必须先进行检查,然后返回数据表,如下所示(示例)


这里有一个helper函数,在该函数中传递您想要删除所有空列的datarow的表(这里我假设所有字符串都是string类型的,那么它就可以工作了) 对于其他类型,u可以检查datacolumn类型,然后可以进行相关检查

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();
     }
}
dt.AcceptChanges();
ds.Tables.Add(dt);
return ds;
公共数据表DeleteEmptyRows(数据表dt)
{
DataTable formattedTable=dt.Copy();
List drList=新列表();
foreach(formattedTable.Rows中的DataRow dr)
{
int count=dr.ItemArray.Length;
int nullcounter=0;
for(int i=0;i
这里有一个helper函数,在该函数中传递您想要删除所有空列的datarow的表(这里我假设所有字符串都是string类型,那么它就可以工作了) 对于其他类型,u可以检查datacolumn类型,然后可以进行相关检查

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();
     }
}
dt.AcceptChanges();
ds.Tables.Add(dt);
return ds;
公共数据表DeleteEmptyRows(数据表dt)
{
DataTable formattedTable=dt.Copy();
List drList=新列表();
foreach(formattedTable.Rows中的DataRow dr)
{
int count=dr.ItemArray.Length;
int nullcounter=0;
for(int i=0;i
如果有人无意中发现本文,这就是我提出的解决方案:

 public DataTable DeleteEmptyRows(DataTable dt)
            {
                DataTable formattedTable = dt.Copy();
                List<DataRow> drList = new List<DataRow>();
                foreach (DataRow dr in formattedTable.Rows)
                {
                    int count = dr.ItemArray.Length;
                    int nullcounter=0;
                    for (int i = 0; i < dr.ItemArray.Length; i++)
                    {
                        if (dr.ItemArray[i] == null || string.IsNullOrEmpty(Convert.ToString(dr.ItemArray[i])))
                        {
                            nullcounter++;
                        }
                    }

                    if (nullcounter == count)
                    {
                        drList.Add(dr);
                    }
                }

                for (int i = 0; i < drList.Count; i++)
                {
                    formattedTable.Rows.Remove(drList[i]);
                }
                formattedTable.AcceptChanges();

                return formattedTable;

            }
//删除所有空行
dt_已解析.Rows.Cast().ToList().FindAll(Row=>
{return String.IsNullOrEmpty(String.Join(“,Row.ItemArray));}).ForEach(Row=>
{dt_已解析.Rows.Remove(Row);});

如果有人无意中发现本文,这就是我提出的解决方案:

 public DataTable DeleteEmptyRows(DataTable dt)
            {
                DataTable formattedTable = dt.Copy();
                List<DataRow> drList = new List<DataRow>();
                foreach (DataRow dr in formattedTable.Rows)
                {
                    int count = dr.ItemArray.Length;
                    int nullcounter=0;
                    for (int i = 0; i < dr.ItemArray.Length; i++)
                    {
                        if (dr.ItemArray[i] == null || string.IsNullOrEmpty(Convert.ToString(dr.ItemArray[i])))
                        {
                            nullcounter++;
                        }
                    }

                    if (nullcounter == count)
                    {
                        drList.Add(dr);
                    }
                }

                for (int i = 0; i < drList.Count; i++)
                {
                    formattedTable.Rows.Remove(drList[i]);
                }
                formattedTable.AcceptChanges();

                return formattedTable;

            }
//删除所有空行
dt_已解析.Rows.Cast().ToList().FindAll(Row=>
{return String.IsNullOrEmpty(String.Join(“,Row.ItemArray));}).ForEach(Row=>
{dt_已解析.Rows.Remove(Row);});

您可以尝试使用以下方法循环数据集中的数据表:

// REMOVE ALL EMPTY ROWS
dt_Parsed.Rows.Cast<DataRow>().ToList().FindAll(Row =>
    { return String.IsNullOrEmpty(String.Join("", Row.ItemArray)); }).ForEach(Row =>
        { dt_Parsed.Rows.Remove(Row); });

您可以尝试使用以下方法循环DataSet中的DataTables:

// REMOVE ALL EMPTY ROWS
dt_Parsed.Rows.Cast<DataRow>().ToList().FindAll(Row =>
    { return String.IsNullOrEmpty(String.Join("", Row.ItemArray)); }).ForEach(Row =>
        { dt_Parsed.Rows.Remove(Row); });

对于null的检查,所有列都应该是string类型。对于null的检查,所有列都应该是string类型。在这种情况下,您假设表只有两列。如果表中有500列,那么比较if语句中的每一列都是不有效的。让它更长一些。您也可以不在迭代语句中删除行。首先,您没有阅读答案吗?我说了一个例子。。这将很好地开始行动。第二,再次检查以确认是否可以在迭代中删除行。“第二,再次检查以确认是否可以在迭代中删除行。”因为它是foreach对行的迭代,所以显然不能。您应该得到InvalidOperationException。在这种情况下,您假设表只有两列。如果表中有500列,那么比较if语句中的每一列都是不有效的。让它更长一些。您也可以不在迭代语句中删除行。首先,您没有阅读答案吗?我说了一个例子。。这将很好地开始行动。第二,再次检查以确认是否可以在迭代中删除行。“第二,再次检查以确认是否可以在迭代中删除行。”因为它是foreach对行的迭代,所以显然不能。您应该获得InvalidOperationException.Or:
dt.Rows.Cast().ToList().FindAll(row=>string.IsNullOrEmpty(string.Join(“,row.ItemArray))).ForEach(row=>{dt.Rows.Remove(row);})或:
dt.Rows.Cast().Where(w=>!w.ItemArray.All(a=>a为null | | | string.IsNullOrWhiteSpace(a为string??a.ToString()))
或:
dt.Rows.Cast().ToList().FindAll(row=>string.IsNullOrEmpty(string.Join(“,row.ItemArray)).ForEach(row=>{dt.Rows.Remove(row);})或:
dt.Rows.Cast().Where(w=>!w.ItemArray.All(a=>a为null | | string.IsNullOrWhiteSpace(a为字符串??a.ToString()))