2010-08-04 85 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); 

` 等