Extension für Suche in Collections

Code


public static class GenericFullTextSearchEnumerableExtension
    {
        public static IEnumerable FindTextAtLeastInOneProperty<T, PropertyType>(this IEnumerable source, Predicate predicate)
        {
            var properties = typeof(T).GetProperties().Where(prop => prop.CanRead && prop.PropertyType == typeof(PropertyType)).ToArray();
            return source.Where(item => properties.Any(prop => PropertySatisfiesPredicate(predicate, item, prop)));
        }

        private static bool PropertySatisfiesPredicate<T, PropertyType>(Predicate predicate, T item, System.Reflection.PropertyInfo prop)
        {
            try
            {
                return predicate((PropertyType)prop.GetValue(item));
            }
            catch
            {
                return false;
            }
        }
    }

Beispiel:

list.FindTextAtLeastInOneProperty((string z) => z.ToString().ToLower().Contains("test")).ToList();

Einsatzmöglichkeit

Diese List Extension ermöglicht das dynamische Filtern von Properties nach einem Suchbegriff mit Hilfe von LINQ und Lambdas sowie Reflection und Generics.

Back to top