您好我正在尝试评估从数据库返回的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 "-"
}
答案 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)
使用循环遍历每条记录并检查它们是否为空。如果您正在查看的记录为空,请将其替换为“ - ”。