c#中是否有等效的SQL NULLIF函数?

时间:2015-08-27 15:39:26

标签: c# .net null nullif

c#中是否内置了SQL NULLIF函数?

它的外观示例:

double? result
double denominator = 0;
double Numerator = 100;
result = Numerator / NullIf(denominator, 0);
result = Numerator / denominator.NullIf(0);
result = Numerator / Object.NullIf(denominator, 0);

5 个答案:

答案 0 :(得分:5)

不,目前没有语言功能。

您可以轻松获得相同的结果,使用三元if:

result = Numerator / (denominator == 0 ? (double?)null : denomiantor);

甚至将它包装为通用函数,如下所示:

Nullable<T> NullIf<T>(T left, T right)
{
    return left == right ? (T?)null : left;
}

然后可以被称为:

result = Numerator / NullIf(denominator, 0);

答案 1 :(得分:3)

不,但你可以创建一个。

    GIDSignIn.sharedInstance().signOut()
    GIDSignIn.sharedInstance().signIn()

答案 2 :(得分:2)

接受的回答给我:

  

运营商&#39; ==&#39;不能应用于&#39; T&#39;类型的操作数。和&#39; <&#39;

我的NULLIF工作示例:

as.numeric(gsub(' ', '.', trimws(gsub('\\D+', ' ', a))))
#[1]  5.0  3.7 17.2

答案 3 :(得分:0)

没有。但你可以使用三元运算符来编写它的紧凑方式:

double? result
double denominator = 0;
double Numerator = 100;
result = denominator == 0 ? (double?)null : Numerator / denominator;

然而,相当于IFNULL:

result = x ?? 0; 

相当于:

result = x.HasValue? x.Value : 0;

答案 4 :(得分:0)

为什么我们假设这个扩展方法能够知道我们的上下文中的null。

它负责调用它的上下文。 因此,错误地说只有一个值被视为null,因为此线程中的所有响应都不合适。

public static T? NullIf<T>(this T value, Func<T,bool> isConsideredNull) 
{
        if(value == null)
        {
           return null;
        }
        return isConsideredNull(value) ? (T?)null : value;
}

我们会以下列方式使用它

string test = "NULL";

test.NullIf((x)=> x.Equals("NULL"));
test.NullIf((x)=> x == "NULL");
test.NullIf((x)=> x.Equals("NULL",StringComparison.InvariantCultureIgnoreCase));