2012-07-27 55 views
1

這裏是我的問題的細分版本:將整數列表追加到C#中的SQL Server查詢中。我怎樣才能做到這一點?

我有一個方法。參數是一個整數列表。我希望創建一個優化的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; 
     } 

在我的代碼的可讀性一般和結構的任何意見,將太感激。我總是很高興,以提高:)

+0

我要補充 - 我沒有製作存儲過程的能力:) – 2012-07-27 14:22:37

回答

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) 
    + ")"; 

(假設總是在列表中至少有一個號碼)

+0

不要忘記參數化! – jrummell 2012-07-27 14:09:24

+0

太棒了,謝謝。我假設使用IN語法比DB更需要做的工作比多個OR更好? – 2012-07-27 14:23:49

+0

@SimonKiely我不認爲在數據庫級別上有很多關於需要完成的工作的區別 - 既不是特別高效 - 但它看起來更好:) – podiluska 2012-07-27 14:27:43

相關問題