web-dev-qa-db-fra.com

Équivalent C # de la fonction IsNull () dans SQL Server

Dans SQL Server, vous pouvez utiliser la fonction IsNull() pour vérifier si une valeur est null et, le cas échéant, renvoyer une autre valeur. Maintenant, je me demande s’il existe quelque chose de similaire en C #.

Par exemple, je veux faire quelque chose comme:

myNewValue = IsNull(myValue, new MyValue());

au lieu de:

if (myValue == null)
  myValue = new MyValue();
myNewValue = myValue;

Merci.

95
HAdes

C'est ce qu'on appelle l'opérateur null coalescing (??):

myNewValue = myValue ?? new MyValue();
180
Kent Boogaart

Malheureusement, il n'y a pas d'équivalent à l'opérateur de coalescence nul qui fonctionne avec DBNull; pour cela, vous devez utiliser l'opérateur ternaire:

newValue = (oldValue is DBNull) ? null : oldValue;
13
Robert Rossney

Utilisez la méthode Equals:

object value2 = null;
Console.WriteLine(object.Equals(value2,null));
5
serializer
public static T isNull<T>(this T v1, T defaultValue)
{
    return v1 == null ? defaultValue : v1;
}

myValue.isNull(new MyValue())
3
Rudy

Pour utiliser DB Nulls, j'ai créé un groupe pour mes applications VB. Je les appelle Cxxx2 car elles sont similaires aux fonctions Cxxx intégrées de VB.

Vous pouvez les voir dans mon projet d'extensions CLR

http://www.codeplex.com/ClrExtensions/SourceControl/FileView.aspx?itemId=363867&changeSetId=17967

1
Jonathan Allen

Utilisez les méthodes ci-dessous.

    /// <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;
    }
0
sushil suthar

Vous écrivez deux fonctions

    //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;
        }
    }

Ils fonctionnent très bien

0

J'utilise la méthode d'extension suivante sur mes types 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;
    }

usage:

MyControl.Text = MyDataTable.Rows[0].ColumnIsNull("MyColumn");
MyOtherControl.Text = MyDataTable.Rows[0].ColumnIsNull("AnotherCol", "Doh! I'm null");

Je vérifie d'abord l'existence de la colonne, car si aucun résultat de la requête n'a de valeur non nulle pour cette colonne, l'objet DataTable ne fournira même pas cette colonne.

0
Denis M. Kitchen