等价于C#中的Oracle DECODE函数

本文关键字:DECODE 函数 Oracle 中的 等价于 | 更新日期: 2023-09-27 18:25:00

Oracle 中内置的DECODE函数

decode( expression , search , result [, search , result]... [, default] )

http://www.techonthenet.com/oracle/functions/decode.php

想要C#语言中的类似功能。有内置的方法吗?

我知道我可以使用if-else-if结构或切换,但我需要动态地这样做。如果没有,请分享一些创建一个的逻辑步骤。

谢谢你抽出宝贵的时间。

等价于C#中的Oracle DECODE函数

您正在寻找Dictionary<int, string>

这是一个老问题,但由于它被另一个答案从模糊中拉了出来,下面是我如何尝试在C#中复制decode函数。不完全一样,但也不算太糟:

public static TOutput Decode<TInput, TOutput>(TInput expression, params Tuple<TInput, TOutput>[] searchResultPairs)
    => DecodeWithDefault(expression, default(TOutput), searchResultPairs);
public static TOutput DecodeWithDefault<TInput, TOutput>(TInput expression, TOutput defaultValue, params Tuple<TInput, TOutput>[] searchResultPairs)
{
    foreach(var searchResultPair in searchResultPairs)
    {
        if ((expression == null && searchResultPair.Item1 == null)
            || (expression != null && expression.Equals(searchResultPair.Item1)))
        {
            return searchResultPair.Item2;
        }
    }
    return defaultValue;
}

示例用法:

Console.WriteLine(Decode(5, Tuple.Create(23, "twenty-three"), Tuple.Create(5, "five")));
Console.WriteLine(Decode(23, Tuple.Create(23, "twenty-three"), Tuple.Create(5, "five")));
Console.WriteLine(Decode(6, Tuple.Create(23, "twenty-three"), Tuple.Create(5, "five")));
Console.WriteLine(DecodeWithDefault(6, "not found", Tuple.Create(23, "twenty-three"), Tuple.Create(5, "five")));

输出:

五个
二十三

未找到