private bool MatchesFilter(object item, string filter)
{
if (filter == null || filter.Length == 0) return true;
var filterables = item.GetType().GetProperties().Where(prop => prop.HasAttr<FilterableAttribute>());
if (filterables.Count() == 0)
{
return item.ToString().IndexOf(filter, StringComparison.InvariantCultureIgnoreCase) >= 0;
}
else
{
foreach (var filterable in filterables)
{
var propValue = filterable.GetValue(item);
if (propValue != null && propValue.ToString().IndexOf(filter, StringComparison.InvariantCultureIgnoreCase) >= 0)
{
return true;
}
}
return false;
}
}