【问题标题】:How to handle NULLIF and ISNULL of SQL statements in C# ASP.net?如何处理 C# ASP.net 中 SQL 语句的 NULLIF 和 ISNULL?
【发布时间】:2017-05-11 16:10:59
【问题描述】:

我有一些我想要理解的 SQL 语句(由其他人编写)。在此 SQL 中,它计算“重量”,如下所示。

ISNULL(NULLIF(CASE WHEN ISNULL(m.Override,0) = 1
    THEN m.OverWeight
    ELSE ISNULL(itemWeight.Weight,groupWeight.Weight) END,0),5) AS Weight  

现在我必须在 ASP.net 中使用这个逻辑。因为我是 C#、ASP.net 和 SQL 的新手,所以我在努力。到目前为止,我已经完成了以下操作。

//Calculate weight
    bool override = DataConversion.GetBoolean(row["Override"]);
    decimal overWeight = DataConversion.GetDecimal(row["OverWeight"]);
    decimal itemWeight = DataConversion.GetDecimal(row["ItemWeight"]);
    decimal groupWeight = DataConversion.GetDecimal(row["GroupWeight"]);

    decimal weight= override? DataConversion.GetDecimal(row["OverWeight"]): 5;

    var par = new par(
                Id: DataConversion.GetInt(row["MaterialId"]),
                weight: weight
                );

我面临的问题是: 如何在条件语句中使用ELSE ISNULL(itemWeight.Weight,groupWeight.Weight? 即decimal weight= override?DataConversion.GetDecimal(row["OverWeight"]): 5;

【问题讨论】:

  • 我不太了解 ASP.net 来帮助您解决这个问题,但 CASE 表达式过于复杂。可以改写为:CASE WHEN m.Override = 1 THEN m.OverWeight WHEN ISNULL(itemWeight.Weight,groupWeight.Weight) = 0 THEN 5 ELSE ISNULL(itemWeight.Weight,groupWeight.Weight) END AS Weight

标签: c# asp.net sql-server nullif


【解决方案1】:

我发现使用更好的格式更容易解决问题 - 清楚地说明了去哪里:

ISNULL(
    NULLIF(
        CASE
            WHEN ISNULL(m.Override,0) = 1
                THEN m.OverWeight
            ELSE 
                ISNULL(itemWeight.Weight,groupWeight.Weight)
        END,
        0
    ),
    5
) AS Weight

现在只使用 ISNULL 和 NULLIF 的定义我得到了这个代码:

decimal weight;                        //  AS Weight

if (override != null && override == 1) // WHEN ISNULL(m.Override,0) = 1
{
    weight = overWeight;               // THEN m.OverWeight
}
else
{
    if (itemWeight != null)            // ELSE ISNULL(...)
        weight = itemWeight;           // itemWeight.Weight
    else
        weight = groupWeight;          // groupWeight.Weight
}

if (weight == 0)                       // NULLIF(..., 0)
{
    weight = 5;                        // ISNULL(..., 5)
}

不过,您需要针对实际的 DBNull 进行测试,这取决于您的数据来自哪里。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-19
    • 2015-01-12
    • 1970-01-01
    • 2019-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多