c# - 在 c# 中将整数列表附加到 SQL Server 查询。我怎样才能做到这一点?

标签 c# sql sql-server tsql sqldatareader

这是我的问题的分解版本:

我有一个方法。参数是一个整数列表。我希望创建一个优化的 SQL 查询,该查询在所有行上返回一个特定值,其中该行的 id 等于参数列表中的整数之一。很简单,对吧?

我有一种感觉,我让它变得比需要的更困难:

private List<string> ReturnValue(List<int> ids)
        {
            List<string> ValuesIWantToReturn = new List<string>();
            StringBuilder sb = new StringBuilder("SELECT ValueIWantToReturnfrom table WHERE ");
            foreach (int id in ids)
            {
                sb.Append( string.Format("ID = {0} OR ", id) );
            }
            sb.Remove(sb.Length - 3, 3); //remove trailing "OR"
                           sb.Append(";");
            SqlDataReader reader =  RunSelectQuery( sb.ToString() );
            while (reader.Read())
            {
                ValuesIWantToReturn.Add(reader.GetString(0));
            }

            return ValuesIWantToReturn;
        }

对于我的代码的一般可读性和结构的任何反馈也将不胜感激。改进总是好的 :)

最佳答案

您可以使用IN 语法而不是OR

 WHERE id IN (1,2,3,4)

将 ID 列表作为表值参数传递给存储过程,然后将其连接到您的表可能更有效,但这可能会过度设计解决方案 - 取决于您的数字列表的长度.

您可以使用 string.Join 来构建您的列表,而不是您的循环

string query = "SELECT ValueIWantToReturn from table WHERE ID IN ("
    + string.Join(",", ids)
    + ")";

(假设列表中总是至少有一个数字)

关于c# - 在 c# 中将整数列表附加到 SQL Server 查询。我怎样才能做到这一点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11689317/

相关文章:

sql - 从 SQL Server 2008 中的所有表中选择所有列

sql-server - Azure链接服务器:

c# - 通过 WCF 服务传递 NetworkCredential 以与 EWS API 一起使用

SQL Server - 在不删除和重新创建代理的情况下启用代理

sql - 循环通过 xml 然后更新 SQL 中的 xml 变量

python - 使用备用 unixODBC 安装

c# - 为什么值类型继承自引用类型?

c# - 如何在 gtk -Linux, MonoDevelop 中设置光标位置

c# - Dispose 方法中有多少工作?

mysql - 在mysql中使用虚拟列