Если заявления, чтобы проверить каждую перестановку - PullRequest
1 голос
/ 16 мая 2011

Привет. Я пытаюсь оценить список из 3 записей данных, возвращаемых из базы данных.

Мне нужно проверить, являются ли эти значения нулевыми, и заменить их символом "-".

Проблема, которую я получаю, состоит в том, что у меня очень длинный список операторов if, есть ли простой способ сделать это?

if (row count == 1)
{
    if (only firstNull)
    {
        //Replace first.label with "-"
    }
    else if (only secondNull)
    {
        //Replace second.label with "-"
    }
    else if (only thirdNull)
    {
        //Replace third.label with "-"
    }
    else if (only (firstNull && secondNull))
    {
        //Replace first.label = "-" & second.label = ""
    } 
    else if (only (secondNull && thirdNull))
    {
        //Replace second & third label = "-"
    }
    else if (only (thirdNull && firstNull))
    {
        //Replace third && first label = "-"
    }
}
else
{
    // Replace all labels with "-"
}

Ответы [ 3 ]

1 голос
/ 16 мая 2011

Я не понимаю, почему у вас так много предложений ... Если поле пустое, вы хотите заменить его на "-" ... У вас есть 3 поля, у вас должно быть максимум 3 предложения ...(Обратите внимание, это псевдокод, в соответствии с вашим вопросом)

if (row count == 1)
{
    if (firstNull)
    {
        //Replace first.label with "-"
    }
    if (secondNull)
    {
        //Replace second.label with "-"
    }
    if (thirdNull)
    {
        //Replace third.label with "-"
    }
}
else
{
    // Replace all labels with "-"
}

Вам не нужно обрабатывать каждую комбинацию из 3 полей как отдельные ifs ...

В идеале ваши поля будутхраниться в какой-то коллекции (которую вы пропустили), таким образом вы сможете сделать что-то вроде:

if(row count == 1)
{
    foreach(field in Fields) 
    {
        if(fieldIsNull) 
        {
            // Set corresponding label to "-"
        }
    }
}

В качестве отступления, если вы всегда хотите сделать перевод при чтении избазы данных, так что, если это NULL, вы хотите '-', тогда может иметь смысл обрабатывать это как часть вашего предложения select.Итак, с Oracle вы могли бы иметь:

SELECT
    NVL(FIELD1, '-'),
    NVL(FIELD2, '-'),
    NVL(FIELD3, '-')
FROM
    SOME_TABLE

Я думаю, что для SQLServer эквивалент будет:

SELECT
    ISNULL(FIELD1, '-'),
    ISNULL(FIELD2, '-'),
    ISNULL(FIELD3, '-')
FROM
    SOME_TABLE

Оба из них будут означать, что база данных вернула '-' вместоNULL, если столбец был пуст.Это, конечно, предполагает, что возвращаемый столбец является строковым типом.Если нет, вам придется выполнить соответствующее преобразование на поле, чтобы превратить его в единицу.

1 голос
/ 16 мая 2011

При доступе к указанным полям вы можете использовать обнуляемый оператор: field ?? "-". Это даст имя поля или "-", если field==null.

например

Object field = null;
System.Console.WriteLine(field ?? "field is null");

выведет:

поле равно нулю

без исключения.

0 голосов
/ 16 мая 2011

Используйте цикл, чтобы просмотреть каждую запись и проверить, являются ли они нулевыми. Если запись, которую вы просматриваете, пуста, замените ее на «-».

...