簡體   English   中英

C# 等效於 SQL Server 中的 IsNull() 函數

[英]C# equivalent of the IsNull() function in SQL Server

在 SQL Server 中,您可以使用IsNull()函數檢查一個值是否為空,如果是,則返回另一個值。 現在我想知道 C# 中是否有類似的東西。

例如,我想做這樣的事情:

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

代替:

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

謝謝。

它被稱為空合並 ( ?? ) 運算符:

myNewValue = myValue ?? new MyValue();

可悲的是,沒有與 DBNull 一起使用的空合並運算符等價物; 為此,您需要使用三元運算符:

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

myValue.isNull(new MyValue())

使用 Equals 方法:

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

為了處理 DB Nulls,我為我的 VB 應用程序創建了一堆。 我稱它們為 Cxxx2,因為它們類似於 VB 的內置 Cxxx 函數。

您可以在我的 CLR 擴展項目中看到它們

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

你寫兩個函數

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

他們工作得很好

我一直在我的 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");

我首先檢查該列是否存在,因為如果沒有查詢結果具有該列的非空值,則 DataTable 對象甚至不會提供該列。

使用以下方法。

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

這半是開玩笑,因為這個問題有點傻。

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

這是一個擴展方法,但它擴展了 System.Object,因此您現在使用的每個對象都有一個 IsNull() 方法。

然后您可以通過執行以下操作來節省大量代碼:

if (foo.IsNull())

而不是超級跛腳:

if (foo == null)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM