寻址不可枚举数据表中的单个单元格

时间:2014-10-29 11:01:19

标签: c# datatable ienumerable datarow datacolumn

由于脏数据,我有一个可能包含null或空单元格的数据表。在这种情况下,无法清除数据。

因为我需要每行一个单数字符串输出(行数可能会改变,列数是一个常量(3)),我需要解决每个单独的单元格,以告诉方法如果要做一个细胞恰好是空的。我最初尝试过以下内容:

数据集:con.dSet list<>:官员

bool notNull(var cell)
{
    if (cell != null)
    {
        return true;
    }
    else
    {
        return false;
    }
}

void hereAreAllThePeople()
{
    if (con.dSet != null)
    {
        foreach (DataRow row in dSet.Tables[0].Rows)
        {
            string str = string.Empty;
            foreach (DataColumn col in row)
            {
                if (notNull)
                {
                    str += col.ToString();
                }
                else if (!notNull)
                {
                    str += "";
                }
            }
            Officers.Add(str);
        }
    }
}

它很丑陋,因为row不可枚举而失败。我怎么得到这个?

1 个答案:

答案 0 :(得分:0)

是的,这是非常古怪的代码,但我想你可以这样做:

foreach (DataColumn col in dSet.Tables[0].Columns)
            {
                if (notNull)
                {
                    str += row[col].ToString();
                }
                else if (!notNull)
                {
                    str += "";
                }
            }

,知道你有三个领域,

for (int i = 0; i <3; i++)
{
if (notNull)
                    {
                        str += row[i].ToString();
                    }
                    else if (!notNull)
                    {
                        str += "";
                    }

}

已编辑(因为我因某些原因无法发表评论) 好吧,我不确定你想要的是什么,但是我没有看到在任何地方都设置了notNull变量,所以我不确定你是如何使用它的。根据您提出的问题的既定目标,这将按预期运作:

void hereAreAllThePeople()
{
    if (con.dSet != null)
    {
        foreach (DataRow row in dSet.Tables[0].Rows)
    {
            Officers.Add(string.Join("", row.ItemArray.Select(p => (p == null) ? "": p.ToString()).ToArray()));
        }
        }
    }