【问题标题】:How to go inside For Loop only if condition is PROCESSED仅当条件已处理时如何进入 For 循环
【发布时间】:2025-11-25 04:30:01
【问题描述】:

我有一个MultipleDropdownlist,用户可以从中选择多个项目。

现在我想要的是,仅当从 dropdownlist 中选择的项目为 PROCESSED 时,条件才应进入 FOR LOOP

下面是我的代码。

DataTable dtspmonthyear = new DataTable();
            ObjPriCon.Open();

            var selectedItemstest = cmbEmp_Name.Items.Cast<ListItem>().Where(x => x.Selected).Select(x => x.Value).ToArray();

            var resulttest = String.Join(",", selectedItemstest);
            var count = selectedItemstest.Length;
            str_emp_sel = resulttest;

            using (SqlConnection conn  = new SqlConnection("ConnectionString"))
            {
                using (SqlCommand sqcmd = new SqlCommand("select  month(a.dt_of_leave)month, year(a.dt_of_leave)year   " +
                                        "from emp_mst a where month(a.dt_of_leave) >= month(getdate())-1  and   " +
                                        "year(a.dt_of_leave)= case when  month(getdate())=1   " +
                                        "then year(getdate())-1 else year(getdate()) end  " +
                                        "and emp_card_no IN (" + str_emp_sel + ") order by emp_name", ObjPriCon))
                {
                    SqlDataAdapter damonthyear = new SqlDataAdapter(sqcmd);
                    damonthyear.Fill(dtspmonthyear);



                    for (i = 0; i < dtspmonthyear.Rows.Count; i++)
                    {
                        CF.ExecuteQuerry("exec Emp_Resign_Allocate_Leave '" + str_emp_sel + "','" + dtspmonthyear.Rows[0]["month"].ToString() + "', '" + dtspmonthyear.Rows[0]["year"].ToString() + "'");
                    }
                }
            }

【问题讨论】:

  • 只需将其包装在if 语句中
  • @p.s.w.g:谢谢,但我应该在哪个condition 上查看IF 声明?
  • 为什么不直接在 SQL 查询中添加 where 子句?作为非常重要的一点,您应该真正地、真正地查看参数化 SQL,以避免为您的 SqlConnectionSqlCommand 使用 SQL injection attacksusing 语句。我还强烈建议查找 .NET 命名约定。
  • 我猜selectedItemstest 包含您感兴趣的选定项目集。我不能确定它的数据类型,但它可能是这样的if (selectedItemstest.Cast&lt;EmpInfo&gt;().Any(x =&gt; x.Status == "PROCESSED")
  • 您还没有解释为什么不将条件放入 SQL 查询中。

标签: c# sql asp.net for-loop drop-down-menu


【解决方案1】:

只需在放入selectedItemstest 变量之前过滤项目。

var selectedItemstest = cmbEmp_Name.Items.Cast<ListItem>()
                        .Where(x => x.Selected && x.Value.ToLower().Contains("processed"))
                        .Select(x => x.Value).ToArray();

【讨论】:

  • 它将过滤什么?
  • 如果您在下拉列表中选择前 3 个项目,这将只返回第一个项目值,因为这是唯一处理的项目。我把你的问题弄错了吗?让我知道,在这种情况下我会删除我的答案。
  • 看,我想要的是,如果所选项目包含 PROCESSED 的文本,那么它应该进入 for 循环,否则它不应该
  • 换句话说,不是和我已经告诉你的意思一样吗?如果selectedItemstest 中只有带有“已处理”文本的项目,则在for 循环中不需要if 条件。
  • 如果我选择三个项目,其中 2 个是待处理的,1 个是 processed。不是for循环会执行三遍吗??