为了账号安全,请及时绑定邮箱和手机立即绑定

字符串中的 C# 多个 switch case 组合

字符串中的 C# 多个 switch case 组合

C#
倚天杖 2022-10-23 13:52:44
我最近在将经典 ASP 应用程序转换为 C# .NET 时遇到了一个相当有趣的问题。在这个 MVC 应用程序中,前端复选框(如下)作为字符串读入,可以有多种组合。AC# case 语句确定正确的组合,并将 case 语句中的 SQL 语句连接到数据层文件中的 SELECT。<input value="A" type="checkbox" class="material-checkbox" id="" name="checkbox" checked /><input value="B" type="checkbox" class="material-checkbox" id="" name="checkbox" /><input value="C" type="checkbox" class="material-checkbox" id="" name="checkbox" /><input value="D" type="checkbox" class="material-checkbox" id="" name="checkbox" />
查看完整描述

4 回答

?
猛跑小猪

TA贡献1858条经验 获得超8个赞

尝试这个:


有多种方法可以做到这一点:ABCD 的组合可以创建总共 15 种组合。我在开关盒中创建了所有 15 种组合:


string checkboxvalue = "";

if(chkA.Checked()) checkboxvalue +="A";

if(chkB.Checked()) checkboxvalue +="B";

if(chkC.Checked()) checkboxvalue +="C";

if(chkD.Checked()) checkboxvalue +="D";




switch(checkboxvalue)

    {

        case "ABCD":

        strSql += "AND .....;"

        break;


        case "ABC":

        strSql += "AND .....;"

        break;


        case "ABD":

        strSql += "AND .....;"

        break;


        case "ACD":

        strSql += "AND .....;"

        break;


        case "BCD":

        strSql += "AND .....;"

        break;


        case "AB":

        strSql += "AND .....;"

        break;


        case "AC":

        strSql += "AND .....;"

        break;


        case "AD":

        strSql += "AND .....;"

        break;


        case "BC":

        strSql += "AND .....;"

        break;


        case "BD":

        strSql += "AND .....;"

        break;


        case "CD":

        strSql += "AND .....;"

        break;


        case "A":

        strSql += "AND .....;"

        break;


        case "B":

        strSql += "AND .....;"

        break;


        case "C":

        strSql += "AND .....;"

        break;


        case "D":

        strSql += "AND .....;"

        break;

    }


查看完整回答
反对 回复 2022-10-23
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

假设用户选择框 A、C、D。


strSql += "SELECT column1, column2, ...

      FROM table_name;"



     switch(checkboxvalue)

        {

        case (("ABCD")): //<---Contains "ACD" but not "B" NO MATCH

        strSql += "AND .....;"

        break;


        case (("ABC")): //<---- Contains "A" but not "BC" NO MATCH

        strSql += "AND.......;"

        break;


        case (("AB")): //<--Contains "A" but no "B" NO MATCH

        strSql += "AND......;"

        break; 


        case (("AC")): //<--Contains "AC" but no "D" NO MATCH

        strSql += "AND.....";

        break;


        case (("ACD")): //<--MATCH! 

        strSql += "AND......"; //<--add to select to pull correct data 

        break;


        }


查看完整回答
反对 回复 2022-10-23
?
largeQ

TA贡献2039条经验 获得超7个赞

由于您基本上是在比较布尔值,因此我建议您制作一个表格来映射您拥有的不同复选框组合,以验证您是否会更好地使用 if-else 或使用少数嵌套 if 而不是开关。尝试重新考虑您将拥有多少输出以及在这种情况下需要执行哪些操作。


static void executeSQL(string checkboxes)

{

    switches checkbox_switches = new switches(checkboxes.Contains('A'), checkboxes.Contains('B'), checkboxes.Contains('C'), checkboxes.Contains('D'));

    if (checkbox_switches.action_A)

    {

        //Execute SQL

    }

    else if (checkbox_switches.action_B)

    {

        //Execute SQL

    }

    else if (checkbox_switches.action_C)

    {

        //Execute SQL

    }

    else if (checkbox_switches.action_D)

    {

        //Execute SQL

    }

    else if (checkbox_switches.action_E)

    {

        //Execute SQL

    }

}


struct switches

{

    public bool action_A, action_B, action_C, action_D, action_E;


    public switches(bool A, bool B, bool C, bool D)

    {

        action_A = A && B;

        action_B = B || D;

        action_C = C && D;

        action_D = action_A && C;

        action_E = !A && !B && !C && D;

    }

}


查看完整回答
反对 回复 2022-10-23
?
Helenr

TA贡献1780条经验 获得超3个赞

我假设您可能正在尝试根据选中的复选框选项构建 where 子句条件。在这里,如果我们尝试使用 switch 语句,我们可能最终会为每个组合编写很多案例,这不会是有效的(比如 - a, ab, abc, abcd, ac, acd, ad, b , bc, bcd, bd, c, cd, d)。如果这些值不是按顺序排列的,那么该组合将成倍增加。更糟。因此,使用带有字符串构建器的简单条件语句来保存最终字符串将是有益的,如下所示 -


StringBuilder sb = new StringBuilder();

if (checkbox1.checked)

{

    sb.Apppend("Condition1");

}


if (checkbox2.checked)

{

    sb.Apppend("Condition2");

}


if (checkbox3.checked)

{

    sb.Apppend("Condition3");

}


if (checkbox4.checked)

{

    sb.Apppend("Condition4");

}


查看完整回答
反对 回复 2022-10-23
  • 4 回答
  • 0 关注
  • 128 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信