c#处理来自数据库的查找值

时间:2011-03-09 10:31:43

标签: c#

在sql数据库中有查找表时。如果要使用表达式中的值,可以使用主键(整数)或记录的实际值。对不起,如果那有点模糊。我给你看一个解释的例子。

sql table

id | name
1  |  incomplete
2  |  submitted
3  |  approved

在c#代码中哪个更正确

if(id == 1){
  //do something
}

if(name == 'incomplete'){
  //do something
}

if(id == (int)states.incomplete){
 //do something
}

一般情况下,我已经使用了枚举示例,但如果那是正确的话,我想要澄清一下

提前致谢

6 个答案:

答案 0 :(得分:1)

您的第二个和第三个示例为读者提供了有关条件试图检查的最多信息 我倾向于同意丹尼尔你应该使用枚举,但是,不能保证将来,不知情的其他人会来做像

这样的事情。
public enum state
{
    incomplete,
    someNEWState,
    submitted,
    approved
}

在这些情景中,我更倾向于使用string enum方法来避免偏执安全。当你回来修复代码时,你永远不会知道你在3个月内可能会做些什么 如果你想保持简单,我会选择字符串检查。获取错误比错误地触发语句更好。

答案 1 :(得分:0)

因为它是一个查找表,所以可以安全地假设该值不会发生变化(很多) 就个人而言,在这样的场景中,我使用枚举和文档的最后一种方式,枚举的值必须与表中的值相对应。

答案 2 :(得分:0)

我会选择3但是使用开关

switch (id)
{
    case (int)states.incomplete: 
        Console.WriteLine("incomplete");
        break;
    default:
        Console.WriteLine("Default case");
        break;
}

答案 3 :(得分:0)

你知道,如果谈到效率比较整数比比较字符串值要快,那么使用枚举的方法就可以了,它澄清了代码。

答案 4 :(得分:0)

所有这些都是正确的但是 1)其他人在查看您的代码时将不知道您的代码中的含义是什么 2)字符串comapre比数字慢 3)最好的方法+你有自动切换片段:)

答案 5 :(得分:0)

[学术理论免责声明]: - )

不是我曾经尝试过,但是,您可以创建一个键入id并包含操作委托的字典。这将节省使用案例陈述或if等的需要等。

让疯狂开始:

class Program
{
    // example methods
    static void Method1(string message)
    {
        Console.WriteLine(message);
    }
    static void Method2(int id, string message)
    {
        Console.WriteLine(string.Format("id: {0} message: {1}", id, message));
    }
    static void Method3()
    {
        Console.WriteLine("submitted");
    }

    static void Main(string[] args)
    {
        int targetId = 2; // or passed in id etc

        // add the actions with examples of params
        // and non param methods
        var actions = 
            new Dictionary<int, Action>
                  {
                      {1, () => Method1("incomplete")}, 
                      {2, () => Method2(targetId, "approved")},
                      {3, () => Method3()}
                  };

        if (actions.ContainsKey(targetId))
        {
            actions[targetId].Invoke();
        }
        else
        {
            // no method defined for this action
            // do something about it
            Console.WriteLine("no action defined here yet");
        }
        Console.ReadKey();
    }
}
显然,在每种情况下,Methodn'方法'都是你正确的“定制”方法。

[edit] - 这里有一个支持这种理论的SO链接:

C# switch statement limitations - why?