C # equivalente de la función IsNull () en SQL Server
-
05-07-2019 - |
Pregunta
En SQL Server puede usar la función IsNull ()
para verificar si un valor es nulo y, si lo es, devolver otro valor. Ahora me pregunto si hay algo similar en C #.
Por ejemplo, quiero hacer algo como:
myNewValue = IsNull(myValue, new MyValue());
en lugar de:
if (myValue == null)
myValue = new MyValue();
myNewValue = myValue;
Gracias.
Solución
Se llama operador de unión nula ( ??
):
myNewValue = myValue ?? new MyValue();
Otros consejos
Lamentablemente, no hay ningún equivalente al operador de unión nula que trabaja con DBNull; para eso, necesitas usar el operador ternario:
newValue = (oldValue is DBNull) ? null : oldValue;
Usa el método de Igualdad:
object value2 = null;
Console.WriteLine(object.Equals(value2,null));
public static T isNull<T>(this T v1, T defaultValue)
{
return v1 == null ? defaultValue : v1;
}
myValue.isNull(new MyValue())
Para trabajar con DB Nulls, creé un grupo para mis aplicaciones de VB. Los llamo Cxxx2 porque son similares a las funciones Cxxx integradas de VB.
Puedes verlos en mi proyecto de extensiones CLR
http://www.codeplex.com/ClrExtensions /SourceControl/FileView.aspx?itemId=363867&changeSetId=17967
Escribe dos funciones
//When Expression is Number
public static double? isNull(double? Expression, double? Value)
{
if (Expression ==null)
{
return Value;
}
else
{
return Expression;
}
}
//When Expression is string (Can not send Null value in string Expression
public static string isEmpty(string Expression, string Value)
{
if (Expression == "")
{
return Value;
}
else
{
return Expression;
}
}
Funcionan muy bien
He estado usando el siguiente método de extensión en mis tipos de DataRow:
public static string ColumnIsNull(this System.Data.DataRow row, string colName, string defaultValue = "")
{
string val = defaultValue;
if (row.Table.Columns.Contains(colName))
{
if (row[colName] != DBNull.Value)
{
val = row[colName]?.ToString();
}
}
return val;
}
uso:
MyControl.Text = MyDataTable.Rows[0].ColumnIsNull("MyColumn");
MyOtherControl.Text = MyDataTable.Rows[0].ColumnIsNull("AnotherCol", "Doh! I'm null");
Primero estoy revisando la existencia de la columna porque si ninguno de los resultados de la consulta tiene un valor no nulo para esa columna, el objeto DataTable ni siquiera proporcionará esa columna.
Utilice los siguientes métodos.
/// <summary>
/// Returns replacement value if expression is null
/// </summary>
/// <param name="expression"></param>
/// <param name="replacement"></param>
/// <returns></returns>
public static long? IsNull(long? expression, long? replacement)
{
if (expression.HasValue)
return expression;
else
return replacement;
}
/// <summary>
/// Returns replacement value if expression is null
/// </summary>
/// <param name="expression"></param>
/// <param name="replacement"></param>
/// <returns></returns>
public static string IsNull(string expression, string replacement)
{
if (string.IsNullOrWhiteSpace(expression))
return replacement;
else
return expression;
}
Esto se entiende a medias como una broma, ya que la pregunta es un poco tonta.
public static bool IsNull (this System.Object o)
{
return (o == null);
}
Este es un método de extensión, sin embargo, extiende System.Object, por lo que cada objeto que usa ahora tiene un método IsNull ().
Luego puedes guardar toneladas de código haciendo:
if (foo.IsNull())
en lugar del súper cojo:
if (foo == null)