[英]How can I use jquery to set the selected value of aspnet drop down list
[英]How can I use drop down list value (String) to filter linq results?
我正在使用以下內容填寫下拉列表:
var columnNames = db.Mapping.MappingSource.GetModel(typeof(StaffDirectoryDataContext))
.GetMetaType(typeof(Person)).DataMembers;
然后我將其轉換為List<String>
以填充下拉列表。
然后,我希望能夠根據用戶的選擇獲得一組結果。 例如,如果他們從下拉列表中選擇“First name”並在文本框中鍵入“Bob”,我想運行LINQ查詢,其中first name = bob。
我可能很厚但我找不到辦法! 偽代碼會......
var q = from x in dc.Persons
where x.[selected column name] == [textbox value]
select x;
有人可以幫忙嗎? 基本上我有列名作為字符串值,我無法弄清楚如何告訴LINQ查詢這是要過濾的列!
我可以閉着眼睛在ADO.NET中做到這一點,但決定一直使用LINQ !!
提前致謝。
David Buchanan使用反射發布了此問題的解決方案:
我不確定你能動態地做到這一點,但你可以有條件地做到這一點。 像這樣的東西:
switch(selected column name)
{
case "student_no":
q = q.where(p=>p.StudentNo == value);
break;
case "student_id":
q = q.where(p=>p.StudentId == value);
break;
}
您可以遍歷列並繼續構建數據。 只要沒有任何調用強制執行IQueryable,就不會執行SQL。
我認為表達樹是正確的方法,但我不太了解它們,所以如果我不想學習表達樹構建,我會給你另類的方法。
public interface IFilter { IEnumerable RetreiveFilter(string filterValue); }
public class FirstNameFilter : IFilter
{
private const string FILTER_TYPE_NAME = "First Name";
public IEnumerable RetreiveFilter(string filterValue)
{
return _myData.Where(person => person.FirstName = filtervalue);
}
public override string ToString()
{
return FILTER_TYPE_NAME;
}
}
為每個過濾器類型創建一個這樣的類,然后用這些過濾器填充你的下拉列表,當他們在過濾器文本中鍵入info時,它將針對((IFilter)filterDropDown.SelectedItem).RetreiverFilter(filterTextBox.Text);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.