Как обрабатывать NULLIF и ISNULL операторов SQL в C# ASP.net?

У меня есть некоторые операторы 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;,

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, в зависимости от того, откуда берутся ваши данные.

Другие вопросы по тегам