2013-07-22 50 views
-1

對不起,我仍然是C#n00b。我有這個代碼將檢索我的控件中的項目。問題是,最終的SQL字符串有點偏離。我的s2變量中有一個額外的逗號。調整CheckBoxList控件中所選項目的列表

這裏是我的代碼隱藏:

protected void btnSubmit_OnClick(object sender, EventArgs e) 
{ 
    //String with all selected items in ListBox lstFilter 
    var selectedQuery = lstFilter.Items.Cast<ListItem>().Where(item => item.Selected); 
    string txtlstFilter = String.Join("','", selectedQuery).TrimEnd(); 

    //String with all selected items in CheckBoxList cbFields1 
    string s1 = string.Empty; 
    new List<ListItem>(cbFields1.Items.Cast<ListItem>().Where(i => i.Selected)).ForEach(x => s1 += string.Format("{0}, ", x.Value)); 

    //String with all selected items in CheckBoxList cbFields2 
    string s2 = string.Empty; 
    new List<ListItem>(cbFields2.Items.Cast<ListItem>().Where(j => j.Selected)).ForEach(y => s2 += string.Format("{0}, ", y.Value)); 
// textBox1.Text = s; 

    var strSQL = "SELECT " + s1 + s2 + " FROM vwClaimRoster WHERE " + cboFilterOption.SelectedValue + " in ('" + txtlstFilter + "');"; 

} 

這裏就是STRSQL結束是(根據我選擇了什麼):

「SELECT MgrName,司,路由,部門,ExpCtr, ('帳戶倡導','帳單控制','CCF索賠');「

正如你所看到的,我需要擺脫列表中的最後一個逗號(ChkRework之後的那個)。

任何幫助,將不勝感激!

回答

1

在第一部分中,使用Union加入listItems中,然後string.Join獲得逗號分隔的列表(而不是ForEach):

string selectList = string.Join(", ", 
    cbFields1.Items.Cast<ListItem>() 
     .Union(cbFields2.Items.Cast<ListItem>()) 
     .Where(i => i.Selected) 
     .Select(x => x.Value) 
); 

對於第二部分,只是單引號添加到string.Join,以及之前/之後:

string strSQL = "SELECT " + selectList + " FROM vwClaimRoster WHERE " + cboFilterOption.SelectedValue 
    " in ('" + String.Join("','", selectedQuery).TrimEnd() + "');"; 
     ^    ^^        ^
+0

薄荷新鮮!在我發佈之後,我最終搞清楚了第二部分,但是第一部分讓我感到非常緊張。謝謝! –

相關問題