You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SSIS中C#转换脚本:替代多else if的层级判断方案

嘿,这个需求太有共鸣了!一堆嵌套的else if不仅写着麻烦,后期要调整优先级或者增减字段时更是噩梦。给你两个在SSIS C#脚本转换里能直接用的优雅方案,完美替代冗余的条件判断:

方案1:用优先级列表+LINQ遍历(最直观)

核心思路是把每个decimal值和对应的来源标签按预设顺序打包成一个列表,然后用LINQ快速定位第一个非空的项,代码简洁还容易维护。

// 先把SSIS输入列的值取出来(根据你的实际列名替换)
decimal? mmValue = Row.MM;
decimal? preValue = Row.PRE;
decimal? ddValue = Row.DD;
decimal? ptValue = Row.PT;
decimal? otherValue = Row.Other; // 替换成你第五个字段的实际名称

// 按优先级顺序创建「值+标签」的配对列表
var priorityPairs = new List<(decimal? Value, string SourceLabel)>
{
    (mmValue, "MM"),
    (preValue, "PRE"),
    (ddValue, "DD"),
    (ptValue, "PT"),
    (otherValue, "OTHER") // 对应第五个字段的标签
};

// 找到第一个非空的有效项
var firstValidItem = priorityPairs.FirstOrDefault(item => item.Value.HasValue);

// 给SSIS输出列赋值
if (firstValidItem.Value.HasValue)
{
    Row.FinalValue = firstValidItem.Value.Value; // 你的decimal类型输出列
    Row.ValueSource = firstValidItem.SourceLabel; // 你的varchar类型标签列
}
else
{
    // 处理所有值都为空的边界情况,按需求调整
    Row.FinalValue = null;
    Row.ValueSource = "NO_VALID_DATA";
}

这个方案的好处太明显了:

  • 优先级顺序一眼就能看明白,要调整顺序直接改列表的排列就行
  • 新增或删除字段时,只需要在列表里加/减一行,不用改一堆条件判断
  • LINQ的写法逻辑清晰,比堆else if可读性高10倍
方案2:封装成可复用方法(适合多脚本共享逻辑)

如果这个取数逻辑在多个SSIS脚本转换里都要用,把它封装成一个私有方法,调用起来更简洁:

// 在脚本类里定义一个私有方法
private (decimal? ValidValue, string SourceTag) GetFirstValid(params (decimal? Value, string Tag)[] valueTagPairs)
{
    return valueTagPairs.FirstOrDefault(pair => pair.Value.HasValue);
}

// 然后在主逻辑里调用
var result = GetFirstValid(
    (Row.MM, "MM"),
    (Row.PRE, "PRE"),
    (Row.DD, "DD"),
    (Row.PT, "PT"),
    (Row.Other, "OTHER")
);

// 赋值逻辑和方案1一致
Row.FinalValue = result.ValidValue ?? null;
Row.ValueSource = result.SourceTag ?? "NO_VALID_DATA";

小提醒

  • 确保你的SSIS输入列是允许为空的decimal类型,如果列设置为非空,那要改成判断是否为业务上的空值(比如0),不过按你的需求应该是处理数据库null,所以列的可空属性要开对
  • 所有值都为空的情况一定要处理,避免输出列出现意外的默认值

内容的提问来源于stack exchange,提问作者user3494110

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:32:29