如果声明检查每个排列

时间:2011-05-16 12:07:00

标签: database c#-2.0

您好我正在尝试评估从数据库返回的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 个答案:

答案 0 :(得分:1)

当您访问指定的字段时,您可以使用可空操作符: field ?? "-"。这将产生字段名称,如果"-",则会产生field==null

例如

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

将输出:

  

字段为空

没有抛出异常。

答案 1 :(得分:1)

我不明白为什么你有这么多条款...如果一个字段为空,你想用“ - ”替换它......你有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。这当然假设您返回的列是字符串类型。如果没有,您必须在该字段上执行适当的转换以将其转换为一个。

答案 2 :(得分:0)

使用循环遍历每条记录并检查它们是否为空。如果您正在查看的记录为空,请将其替换为“ - ”。