Адресация отдельных ячеек в неперечислимых данных

У меня есть таблица данных, которая может содержать пустые или пустые ячейки из-за грязных данных. В этом сценарии очистка данных невозможна.

Поскольку мне нужен вывод единственной строки для каждой строки (количество строк может измениться, количество столбцов является константой (3)), мне нужно адресовать каждую отдельную ячейку, чтобы сообщить методу, что делать, если ячейка происходит быть пустым. Изначально я пробовал следующее:

dataset: 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 не перечислим. Как мне это сделать?


person Wolfish    schedule 29.10.2014    source источник
comment
Использовать классический цикл for вместо foreach? Вам также следует по возможности избегать неоднозначных имен, таких как dSet и con, чтобы сделать код читаемым для других.   -  person G_V    schedule 29.10.2014
comment
@ user3427079 Верно, я здесь пробовал. dSet для DataSet и con для Connection.   -  person Wolfish    schedule 29.10.2014


Ответы (1)


Да, это довольно странный код, но я полагаю, вы могли бы сделать это:

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()));
        }
        }
    }
person Kell    schedule 29.10.2014
comment
Единственная проблема, которая у меня здесь, заключается в том, что это также будет выпадать из одного из столбцов (или, скорее, ячеек) с нулевым значением. Под падением я подразумеваю, что метод пропустит всю строку, а не только эту ячейку. - person Wolfish; 29.10.2014
comment
Да, для этого потребуется еще один цикл, в котором вы проверяете каждую ячейку для каждой строки, пуста она или нет, и вставляете какой-то ПУСТОЙ код, если он есть. - person G_V; 29.10.2014