2012-10-10 11 views
5

Sto cercando di implementare la ricerca di un elemento personalizzato in un elenco con un nome colonna personalizzato utilizzando un servizio web per JQgrid, ma sono fuori di idee Apprezzerei qualsiasi aiuto su questo .selezionare un elemento da una colonna personalizzata da un elenco

Non riesco a copiare il mio codice qui, ma, per esempio, ho un'entità come:

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

e ho creato una funzione per restituire un elenco di questa classe:

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; 
} 

e dalla querystring ottengo il searchField e searchString, ho memorizzato questi valori nelle stringhe searchField e searchString.

voglio qualcosa su cui lavorare simile a questa funzione (So che la sua sbagliato, ma voglio che la funzionalità):

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

Non ho alcun problema con ottenere la lista o qualcosa, ma voglio solo qualcosa di simile a questo .

risposta

3

È possibile utilizzare Reflection:

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

Grazie per la risposta, ma si dice il .GetValue() non dispone di un metodo di overload che accetta 1 argomento .. –

+0

@ OmarAs'hab: Quale framework .NET stai usando? –

+1

@ OmarAs'hab: se usi .Net 4.0 puoi usare 'GetValue (x, null)' –

3

è possibile implementare simile alla seguente.

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

Questo dovrebbe funzionare grazie, ma il problema è che nella classe ho così tanti attributi da usare, e ho anche molte altre classi, quindi volevo un metodo semplice e veloce. –

Problemi correlati