2014-10-26 152 views
1

我有一個代碼,它將多個選定的項目從列表框中轉換爲逗號分隔值的單個行。現在我想在多行文本框中實現同樣的事情,在多行文本框中,值將像a​​bc,def,pqr現在我想分開它在數據庫'abc','def','pqr'中進行搜索。下面的代碼我使用是用於列表框如何修改它,這樣我可以使用它的文本框目的使用單引號將多行逗號分隔的文本框值轉換爲

var SB = new StringBuilder(); 
    foreach (ListItem lst in ListBox1.Items) 
    { 
     if (lst.Selected) 
     { 
      SB.Append("'" + lst.Value + "',"); 
     } 
    } 
    var FinalString = SB.ToString().Substring(0, (SB.Length - 1)); 
+0

你能詳細說明你的代碼「不起作用」嗎?你在期待什麼,究竟發生了什麼?如果您遇到異常,請發佈它發生的行和異常詳細信息。 – gunr2171 2014-10-26 22:19:48

+0

此代碼對於列表框選擇工作正常。我想用多行文本框達到同樣的效果 – user3074125 2014-10-27 05:09:00

回答

2
String.Join(",", txt.Lines.Select(s => "'" + s + "'")) 

的string.join是獲取的隔膜作爲第一個參數,字符串的序列的方法作爲第二。它解決了開箱即用的問題,更重要的是解決了當用循環進行時最煩人的「最後逗號」問題。您可以將此方法用於列表框代碼。

第二個參數將字符串數組映射到相同的字符串並添加單引號。基本上它需要一堆字符串並將轉換應用到它們中的每一個並返回一堆轉換後的字符串。該轉換在lambda表達式中表示。

+0

現在好了嗎? – Stilgar 2014-10-27 07:36:54

+0

@Stilgar:我想通過使用文本框來實現這一點。在一個簡單的方法我的文本框獲取值abc,def,pqr我希望這是作爲'abc','def','pqr'我希望這將它添加到一個選擇語句 – user3074125 2014-10-27 13:33:44

+0

首先,我已經給你這樣做的代碼(假設您使用的文本框的Multiline屬性設置爲true),然後您不這樣做來獲取值到SQL中,因爲系統將容易受到SQL注入 – Stilgar 2014-10-27 14:41:27

0

原來的答案是非常好的。但是請注意,在修改每個輸入串的選擇是簡單的構造加入文字是不同的:

"'" + string.Join("','", txt.Lines) + "'" 

這樣,有創建較少的中間目標(否Select()迭代器,只是一個string.Concat()額外調用,而不是一個每個枚舉元素)。在大多數情況下,兩者之間沒有可衡量的差異,但有些人可能更喜歡這種方法(畢竟,代碼有點短)。