1

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

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

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

4

1 回答 1

4

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

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

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

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

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

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

于 2012-07-27T14:00:36.660 回答