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