2010-08-04 33 views
0

我有一個數據庫中的婚姻狀況字段,每個數字代表不同的表中的婚姻狀況。第一個表有數字1,3,4:如何將號碼映射到婚姻狀態

 
1 = single 
3 = married 
4 = divorced 

第二的值有:

 
single 
married 
divorced 

我需要一個if語句如下:如果表中的字段返回1我想價值如果3'已婚'並且如果4'離婚'(使用Response.Write),則寫入消息'single'。

+0

(未遂清理的問題,不知道如果我不小心改變它的意思。) – dtb 2010-08-04 10:54:35

回答

6

與其在C#中編寫「if」語句,爲什麼不直接在數據庫中執行聯接以檢索文本作爲數據庫查詢的一部分?

+0

你的意思是一個檢索文本值的存儲過程,如果是的話,我不能在該數據庫上創建一個,因爲它由另一個部門管理,並且不允許只執行寫入r從它的數據 – Meg 2010-08-04 10:56:39

+0

所以我不能在那裏創建任何存儲過程 – Meg 2010-08-04 10:57:14

+2

@Meg:不,我的意思是,你必須已經在做一個查詢來獲取值 - 所以更改SQL以執行一個連接對描述表以及。 – 2010-08-04 10:57:32

1
string GetStatus(int StatusCode) 
{ 
    return StatusCode == 1 ? "single" : StatusCode == 3 ? "married" : "divorced"; 
} 

順便說一句,通常沒有很好的理由來規範這個目標。如果您將實際狀態存儲在表中並且磁盤空間量可以忽略不計,性能會更好。

編輯: @喬恩的想法可能比這個功能更好

+0

因此,一千萬條記錄......存儲1,3,4 = 10MB數據(tinyint的每個條目1個字節)。存儲名稱= 140MB(平均7個字符,每個字符2個字節)。這並不是很大,但它不是微不足道的。 – cjk 2010-08-04 10:58:39

+1

與所有連接或函數調用的性能相比較,將數字解析爲字符串,我認爲130MB在這個日子和年齡可以忽略不計。 – Sruly 2010-08-04 15:57:53

6

你可以寫,如果其他人,或case語句,但容易,只需使用陣列對於這樣的小單子

string[] maritalStatus = new string[] { "", "Single", "", "Married", "Divorced"}; 

Response.Write (maritalStatus[dbValue]); 
+0

我喜歡這個,富有創意和靈活。 +1 – Sruly 2010-08-04 10:56:48

+1

我建議詞典可能比字符串數組更合適,並添加了諸如「maritalStatus.Add(1,」single「)等元素。 – 2010-08-04 11:02:22

+0

感謝您的投票。只需要再寫幾行就可以了,上面的代碼只是簡短而且簡潔,如果id沒有實際跳轉,看起來會更好 – 2010-08-04 11:12:51

2

另一個選項將聲明一個枚舉映射到像這樣的值:

enum RelationshipStatus 
{ 
    Single = 1, 
    Married = 3, 
    Divorced = 4 
} 

然後你可以調用ToString方法包含您的枚舉值的變量。請注意,您需要將SQL表中的整數值轉換爲枚舉類型。

這種方法的優點是可以完全消除條件if語句,我認爲結果更具可讀性。缺點是如果你需要的話,本地化到其他語言(翻譯)並不容易。

0

也許一個枚舉將是最優雅的方法?

public enum MaritalStatus 
{ 
    Single = 1, 
    Married = 3, 
    Divorced = 4 
} 

然後,你可以簡單地使用Enum.GetName()和Enum.Parse()爲字符串,int和MaritalStatus對象之間的轉換。這也可能爲您在其他一些業務邏輯中提供更優雅的解決方案。

0

有不同的方法來做到這一點,好的和壞的方面

  1. 號如果你能加入查詢表 - 有一個好辦法
  2. 你可以使用特效
  3. SQL-CASE
  4. 如果在中間層/ C#代碼中,您可以切換大小寫。
  5. 您可以創建枚舉和類型轉換

像 `

public enum MaritalStatus 
    { 
     Single = 1, 
     Married = 3, 
     Divorced = 4 
    } 

MaritalStatus status = (MaritalStatus) 4; 
Console.WriteLine(status); 

` 等