当我填写列表框时,我会这样做:
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)
所以,这个问题有两个部分。
如何更改“var selectedHobbies”行以拉入StoredValue而不是DDLValue
如何重构我的“string strHobbies”行,以便在每个项目周围放置双引号,以便我可以在“IN”子句中使用它?
我想我可能希望我的最终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倒了。我很感激。
答案 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();