使用索引而不是值

时间:2015-06-10 14:43:02

标签: c# listbox code-behind

当我填写列表框时,我会这样做:

SqlDataAdapter adapter = new SqlDataAdapter("Select [DDLValue], [StoredValue] 
from [tmpDropdowns] WHERE DDLName = 'ddlHobbies' ORDER BY [SortOrder] ASC", conn);

adapter.Fill(DDLHobbies);

Hobbies.DataSource = DDLHobbies;
Hobbies.DataTextField = "DDLValue";
Hobbies.DataValueField = "StoredValue";
Hobbies.DataBind();

当我想要检索项目时,我会做这样的事情:

var selectedHobbies = Hobbies.Items.Cast<ListItem>().Where(item => item.Selected);
string strHobbies = String.Join(",", selectedHobbies).TrimEnd();

不幸的是,这给了我类似的东西:

strHobbies = "Fishing,Skiing,Pool,Birdwatching"

我说“不幸”,因为我的目标是在SQL字符串的“WHERE”子句中使用strHobbies。所以,我的SQL字符串应该类似于:

SELECT * FROM MyTable WHERE Hobbies in (strHobbies)

所以,这个问题有两个部分。

  1. 如何更改“var selectedHobbies”行以拉入StoredValue而不是DDLValue

  2. 如何重构我的“string strHobbies”行,以便在每个项目周围放置双引号,以便我可以在“IN”子句中使用它?

  3. 我想我可能希望我的最终SQL字符串看起来更像:

    SELECT * FROM MyTable WHERE Hobbies in ("2", "5", "6", "9")
    

    修改

    我改变了一件事:

    List<string> selectedHobbies = Hobbies.Items.Cast<ListItem>()
        .Where(item => item.Selected).Select(item => item.Value).ToList();
    
    string strHobbies = String.Join(",", selectedHobbies).TrimEnd();
    

    当我将鼠标悬停在selectedHobbies上时,这给了我StoredValue而不是DDLValue,但是当我在立即窗口中键入'?strHobbies'时,它说:“当前上下文中不存在名称strHobbies”。所以,如果有人可以帮助我#2,那么我已经#1倒了。我很感激。

2 个答案:

答案 0 :(得分:2)

对于#2,您希望在每个值周围使用单引号,而不是双引号。 (假设Hobbies不是DB中的整数)

string strHobbies = String.Join("','", selectedHobbies).TrimEnd();

答案 1 :(得分:0)

你可以把它们放在Select中,就像这样

List<string> selectedHobbies = Hobbies.Items.Cast<ListItem>()
.Where(item => item.Selected).Select(item => "'" + item.Value + "'").ToList();