2012-10-10 97 views
5

我想實現在列表中使用jQgrid的webservice使用自定義列名稱搜索自定義元素,但我沒有任何想法我將不勝感激任何幫助。從列表中的自定義列中選擇一個元素

我不能在這裏複製我的代碼,但是,例如,我有這樣一個實體:

public class Test 
{ 
    public int ID {get; set;} 
    public string Name {get; set;} 
    public string Nationality {get; set;} 
} 

和我創建了一個函數返回這個類的列表:

public static List <Test> getList() 
{ 
    List<Test> testList = new List<Test>(); 
    Test testList1 = new Test(); 

    testList1.ID = 123; 
    testList1.Name = "asd"; 
    testList1.Nationality = "qwe"; 

    testList.Add(testList1); 
    return testList; 
} 

並從querystring我得到searchField和searchString,我已經將這些值存儲在字符串searchField和searchString中。

我想要的東西的工作方式與該功能(我知道它錯了,但我想要的功能):

list=testList.Where(x=>x.searchField.Contains(searchString)); 

我都沒有問題越來越列表或什麼,但我只是想類似這樣的東西。

回答

3

您可以使用Reflection

list = testList.Where(x => (x.GetType() 
       .GetProperty(searchField) 
       .GetValue(x) as string).Contains(searchString)  
    ); 
+0

感謝您的答覆,但它說的.GetValue()不具有需要1個說法.. –

+0

@ OmarAs'hab的重載方法:您正在使用哪個.NET框架? –

+1

@ OmarAs'hab:如果你使用.Net 4.0,你可以使用'GetValue(x,null)' –

3

可以實現它像下面這樣。

if(searchField == "ID") 
{ 
    testList = testList.Where(x => x.ID == searchString); 
} 
else if (searchField == "Name") 
{ 
    testList = testList.Where(x => x.Name.Contains(searchString); 
} 
else if (searchField == "Nationality") 
{ 
    testList = testList.Where(x => x.Nationality.Contains(searchString); 
} 
+0

這將工作謝謝你,但問題是,在我有這麼多的屬性使用,我也有很多其他類,所以我想要一個簡單而快速的方法。 –

相關問題