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

我有办法参数是整数列表。我希望创建一个优化的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/

10-16 21:48
查看更多