您好如何在我的陈述=>
中忽略读者c#中的空值 LegalDesc = reader["legal1"].ToString() + ' ' +
reader["legal2"].ToString() + ' ' +
reader["legal3"].ToString();
场景:如果legal2为空值,则生成的字符串为
legalDesc = legal1 + ' ' + legal3
如何在VB中使用iif?
答案 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然后空格...