2012-10-10 41 views
5

Estoy tratando de implementar la búsqueda de un elemento personalizado en una lista con un nombre de columna personalizado utilizando un servicio web para JQgrid, pero estoy sin ideas agradecería cualquier ayuda sobre este .seleccionar un elemento de una columna personalizada de una lista

No puedo copiar el código aquí, pero, por ejemplo, tengo una entidad como:

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

y creé una función para devolver una lista de esta clase:

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

y de la cadena de consulta obtengo SearchField y searchString, he almacenado estos valores en las cadenas searchField y searchString.

quiero algo para trabajar similar a esta función (Sé que es malo, pero quiero que la funcionalidad):

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

no tengo problemas con la obtención de la lista ni nada, pero sólo quiero algo similar a esto .

Respuesta

3

Puede utilizar Reflection:

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

Gracias por su respuesta, pero se dice que el .GetValue() no tiene un método de sobrecarga que toma 1 argumento .. –

+0

@ OmarAs'hab: ¿Qué marco .NET está usando? –

+1

@ OmarAs'hab: si usa .Net 4.0 puede usar 'GetValue (x, null)' –

3

Usted puede ponerlo en práctica como la siguiente.

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

Esto funcionaría gracias, pero el problema es que en la clase tengo tantos atributos para ser utilizados, y también tengo muchas otras clases, así que quería un método simple y rápido. –

Cuestiones relacionadas