Tengo una cuadrícula de interfaz de usuario de Kendo que actualmente estoy permitiendo filtrar en varias columnas. Me pregunto si hay un enfoque alternativo para eliminar la declaración del interruptor externo.
Básicamente, quiero poder crear un método de extensión para poder filtrar IQueryable<T> y quiero eliminar la declaración de mayúsculas y minúsculas para no tener que cambiar los nombres de columna.
private static IQueryable<Contact> FilterContactList(FilterDescriptor filter, IQueryable<Contact> contactList)
{
switch (filter.Member)
{
case "Name":
switch (filter.Operator)
{
case FilterOperator.StartsWith:
contactList = contactList.Where(w => w.Firstname.StartsWith(filter.Value.ToString()) || w.Lastname.StartsWith(filter.Value.ToString()) || (w.Firstname + " " + w.Lastname).StartsWith(filter.Value.ToString()));
break;
case FilterOperator.Contains:
contactList = contactList.Where(w => w.Firstname.Contains(filter.Value.ToString()) || w.Lastname.Contains(filter.Value.ToString()) || (w.Firstname + " " + w.Lastname).Contains( filter.Value.ToString()));
break;
case FilterOperator.IsEqualTo:
contactList = contactList.Where(w => w.Firstname == filter.Value.ToString() || w.Lastname == filter.Value.ToString() || (w.Firstname + " " + w.Lastname) == filter.Value.ToString());
break;
}
break;
case "Company":
switch (filter.Operator)
{
case FilterOperator.StartsWith:
contactList = contactList.Where(w => w.Company.StartsWith(filter.Value.ToString()));
break;
case FilterOperator.Contains:
contactList = contactList.Where(w => w.Company.Contains(filter.Value.ToString()));
break;
case FilterOperator.IsEqualTo:
contactList = contactList.Where(w => w.Company == filter.Value.ToString());
break;
}
break;
}
return contactList;
}
Alguna información adicional, estoy usando NHibernate Linq. También otro problema es que la columna "Nombre" en mi cuadrícula es en realidad "Nombre" + "" + "Apellido" en mi entidad de contacto. También podemos suponer que todas las columnas filtrables serán cadenas.
EDITAR Recuerde que esto debe funcionar con NHibernate Linq y AST.