Ich habe ein Kendo UI-Raster, das derzeit das Filtern nach mehreren Spalten zulässt. Ich frage mich, ob es einen alternativen Ansatz gibt, um die äußere switch-Anweisung zu entfernen.
Grundsätzlich möchte ich in der Lage sein, eine Erweiterungsmethode zu erstellen, damit ich nach a filtern kann, IQueryable<T>
und ich möchte die äußere case-Anweisung löschen, damit ich die Spaltennamen nicht wechseln muss.
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;
}
Einige zusätzliche Informationen, ich verwende NHibernate Linq. Ein weiteres Problem ist, dass die Spalte "Name" in meinem Raster tatsächlich "Vorname" + "" + "Nachname" in meiner Kontaktentität ist. Wir können auch davon ausgehen, dass alle filterbaren Spalten Zeichenfolgen sind.
BEARBEITEN Denken Sie daran, dass dies mit NHibernate Linq und AST funktionieren muss .