这是我的问题的细分版本:
我有办法参数是整数列表。我希望创建一个优化的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/