C#等效于SQL Server中的IsNull()函数

时间:2008-10-03 22:59:18

标签: c# .net sql-server isnull

在SQL Server中,您可以使用IsNull()函数检查值是否为null,如果值为null,则返回另一个值。现在我想知道C#中是否有类似内容。

例如,我想做类似的事情:

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

而不是:

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

感谢。

10 个答案:

答案 0 :(得分:184)

它被称为空合并(??)运算符:

myNewValue = myValue ?? new MyValue();

答案 1 :(得分:13)

可悲的是,没有与使用DBNull的null合并运算符等效的东西;为此,您需要使用三元运算符:

newValue = (oldValue is DBNull) ? null : oldValue;

答案 2 :(得分:5)

使用Equals方法:

object value2 = null;
Console.WriteLine(object.Equals(value2,null));

答案 3 :(得分:3)

public static T isNull<T>(this T v1, T defaultValue)
{
    return v1 == null ? defaultValue : v1;
}

myValue.isNull(new MyValue())

答案 4 :(得分:1)

为了与DB Nulls合作,我为我的VB应用程序创建了一堆。我将它们称为Cxxx2,因为它们类似于VB的内置Cxxx函数。

您可以在我的CLR Extensions项目中看到它们

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

答案 5 :(得分:0)

你写两个功能

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

他们的工作非常好

答案 6 :(得分:0)

我一直在对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;
    }

用法:

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

我首先检查该列是否存在,因为如果查询结果中没有该列的非null值,则DataTable对象甚至不会提供该列。

答案 7 :(得分:0)

使用以下方法。

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

答案 8 :(得分:0)

    public static T IsNull<T>(this T DefaultValue, T InsteadValue)
    {

        object obj="kk";

        if((object) DefaultValue == DBNull.Value)
        {
            obj = null;
        }

        if (obj==null || DefaultValue==null || DefaultValue.ToString()=="")
        {
            return InsteadValue;
        }
        else
        {
            return DefaultValue;
        }

    }

//This method can work with DBNull and null value. This method is question's answer

答案 9 :(得分:-10)

这只是一个笑话,因为这个问题有点傻。

public static bool IsNull (this System.Object o)
{
   return (o == null);
}

这是一个扩展方法,但它扩展了System.Object,因此您现在使用的每个对象都有一个IsNull()方法。

然后您可以通过执行以下操作来节省大量代码:

if (foo.IsNull())

而不是超级跛脚:

if (foo == null)