public static List <WebFile> Search(List <WebFile> dataFiles, string SearchQuery, SortBy SortBy) { lock (loadSearchListLock) { SortFiles(dataFiles, SortBy); return(dataFiles.Select(item => new { i = item, Props = item.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public) }) .Where(item => item.Props.Any(p => { var val = p.GetValue(item.i, null); return val != null && (p.Name.ToLower() == "URL".ToLower() || string.IsNullOrEmpty("URL")) && (TextExtensions.ContainsAll(Uri.UnescapeDataString(val.ToString().ToLower()), TextExtensions.GetWords(SearchQuery.ToLower())) || string.IsNullOrEmpty(SearchQuery)); })) .Select(item => item.i) .ToList()); } }