2017-05-11 5 views
0

필자는 이해하려고하는 일부 SQL 문 (다른 누군가가 작성한 문)을 가지고 있습니다. 이 SQL에서는 아래와 같이 'Weight'를 계산합니다.C# ASP.net에서 SQL 문에 NULLIF 및 ISNULL을 처리하는 방법은 무엇입니까?

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

나는 그것을 돕기에 충분한 ASP.net을 모르지만, 그 'CASE' 표현은 지나치게 복잡합니다. 그것과 같이 재 표현 될 수있다 : CASE' \t WHEN m.Override = 1 THEN m.OverWeight \t WHEN ISNULL (itemWeight.Weight, groupWeight.Weight) = 0 THEN 5 \t ELSE ISNULL (itemWeight.Weight, groupWeight.Weight) END AS 무게 – Lamak

답변

2

나는 쉽게 더 좋은 서식 해결하기 위해 발견 - 만드는 곳 분명히 무슨 일이 진행됩니다

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) 
} 

당신 방법 : ISNULL과 NULLIF의

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

지금 바로 사용하여 정의가이 코드를 가지고 하지만 실제로 DBNull에 대해 테스트해야하며 데이터가 어디서 왔는지에 따라 다릅니다.