0

我正在尝试使用构建 SQL 查询StringBuilder,但我在尝试执行部分WHERE子句时陷入困境。

我有一个包含一堆值的列表框,并允许多项选择。我需要遍历选定的项目,然后放入IN类似...的语句中

WHERE SOME_FIELD IN ('Value','NextValue','AnotherValue')

到目前为止,我已经编写了这样的代码......

if (lstSalesGroup.SelectedItem != null)
{
    selectQuery.Append("AND SALES_GROUP IN (");
    foreach (ListItem item in lstSalesGroup.Items)
    {
        if (item.Selected)
            selectQuery.Append("'" + item.Value + "',");
    }
    selectQuery.Append(")");
}

我需要测试该项目是否是循环中的最后一个项目,以便它不会在关闭“)”之前放置“,”。

我怎样才能做到这一点?或者,如果有更好的方法来构建这部分查询,请提出建议,我还在学习,我们都必须从某个地方开始!:)

最终这将是一个零件搜索的查询。

提前致谢

4

5 回答 5

4

有几种方法可以做到这一点。

您可以使用string.TrimEnd从字符串中删除多余的逗号,也可以使用string.Join创建一个新字符串,例如

string InPartQuery = string.Join(",", lstSalesGroup.Items
                                          .Cast<ListItem>()
                                          .Where(t => t.Selected)
                                          .Select(r => "'" + r.Value + "'"));
于 2013-04-16T09:35:22.673 回答
1

你可以用String.Join一些Linq

为了清楚起见,我将代码放在变量中。

if (lstSalesGroup.SelectedItem != null)
{
    var queryStr = "AND SALES_GROUP IN ({0})";
    var selectedItemValues = (from itm in lstSalesGroup.Items.Cast<ListItem>()
                              where itm.Selected
                              select String.Format("'{0}'", itm));
    selectQuery.Append(String.Format(queryStr, String.Join(",", selectedItemValues)));
}
于 2013-04-16T09:31:33.873 回答
1

尝试使用 linq

selectQuery.Append("AND SALES_GROUP IN (");

selectQuery.Append(string.Join(",", lstSalesGroup.Items.Select(i => "'" + i.Value + "'")));    

selectQuery.Append(")");

这将解决您的问题,但是您在此处遇到了 SQL 注入问题。我强烈建议您在查询中使用参数。

于 2013-04-16T09:33:23.503 回答
0

尝试这个:

if (lstSalesGroup.SelectedItem != null)
{
    selectQuery.Append("AND SALES_GROUP IN (");
    var local = lstSalesGroup.Items.Where(c => c.Selected)
                       .Select(c => "'"+c.Value+"'")
                       .Aggregate((c,n) => c+ ", "+n);

   selectQuery.Append(local);            
   selectQuery.Append(")");
}

查看示例以获取有关该.Aggragate(...)方法的更多信息

于 2013-04-16T09:30:31.607 回答
0
Dim s As String = "'"
    For i = 0 To ListBox1.Items.Count - 1
        s = s & ListBox1.Items.Item(i) & "','"
    Next
于 2017-03-26T12:39:07.117 回答