忽略 reader 中的空值

Ignore null values in reader

嗨,我如何在我的语句中忽略 reader c# 中的空值 =>

 LegalDesc = reader["legal1"].ToString() + ' ' + 
             reader["legal2"].ToString() + ' ' + 
             reader["legal3"].ToString();

场景:如果 legal2 是空值,则结果字符串将为

 legalDesc = legal1 + ' ' + legal3

如何应用 iif 在 VB 中使用?

您可以使用集合 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 方法来检测它们。

使用简单的扩展方法:

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));

第一个

不要 那样进行字符串连接,每次连接时都会创建一个新的字符串实例,因为字符串是 Immutable。有一个 C# class 处理追加,它是 StringBuilder

所以尝试像这样实现它

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

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

嗨,我只是想重新表述一下我的问题...

如果 legal1 为空,如何查看 LegalDesc = reader["legal1"].ToString() 的值?

我在网格中查看我的结果,因此网格在单元格中显示 NULL。结果应该是空白 space 而不是 NULL.... 在 VB net 中我可以使用 IIf 函数 if null then blank space...