忽略阅读器中的空值

时间:2015-03-18 13:46:14

标签: c# sqldatareader

您好如何在我的陈述=>

中忽略读者c#中的空值
 LegalDesc = reader["legal1"].ToString() + ' ' + 
             reader["legal2"].ToString() + ' ' + 
             reader["legal3"].ToString();

场景:如果legal2为空值,则生成的字符串为

 legalDesc = legal1 + ' ' + legal3

如何在VB中使用iif?

4 个答案:

答案 0 :(得分:1)

您可以使用集合和String.Join

List<string> legals = new List<string>();
if(!reader.IsDbNull(reader.GetOrdinal("legal1")))
    legals.Add(reader["legal1"].ToString());
if(!reader.IsDbNull(reader.GetOrdinal("legal2")))
    legals.Add(reader["legal2"].ToString());
if(!reader.IsDbNull(reader.GetOrdinal("legal3")))
    legals.Add(reader["legal3"].ToString());
LegalDesc = string.Join(" ", legals); 

当然,您还可以使用自定义扩展方法使代码更加优雅:

public static string SafeGetString(this SqlDataReader reader, int colIndex)
{
   if(!reader.IsDBNull(colIndex))
       return reader.GetString(colIndex);
   else 
       return string.Empty;
}

现在你可以使用:

string[] legals = { reader.SafeGetString(0), reader.SafeGetString(1), reader.SafeGetString(2) };
LegalDesc = string.Join(" ", legals.Where(s => !string.IsNullOrEmpty(s))); 

这假设它实际上是一个string列,并且列序数位置从0到2.如果不是这种情况,请使用上面显示的reader.GetOrdinal方法来检测它们。

答案 1 :(得分:0)

使用简单的扩展方法:

public static string ValueOrEmpty(this object source) 
{
     return source == null ? string.Empty : source.ToString();
}

var values = new[] { reader["legal1"],reader["legal2"],reader["legal3"] };
LegalDesc = string.Join(" ", 
                        values.Select(x => x.ValueOrEmpty())
                              .Where(x => x != string.Empty));

答案 2 :(得分:0)

第一

这样做字符串连接,每次连接时,它都会创建一个新的字符串实例,因为字符串是Immutable。有一个处理追加的C#类,它是StringBuilder

所以尝试像这样实现它

StringBuilder builder = new StringBuilder();
builder.Append(reader["legal1"])
    .Append(" ")
    .Append(reader["legal2"])
    .Append(" ")
    .Append(reader["legal3"]);
Console.WriteLine(builder.ToString());
Console.ReadKey();

这样,您甚至不需要检查它是否为空。

答案 3 :(得分:0)

嗨,我只是想重新解释我的问题...

如何查看LegalDesc = reader [“legal1”]的值。如果legal1为null,则ToString()?

我在网格中查看结果,因此网格在单元格中显示为NULL。结果应该是一个空格而不是NULL .... 在VB网中我可以使用IIf函数,如果为null然后空格...