public ListResponse <VSGalleryQAThread> List(ListRequest request) { request.CheckNotNull(); var response = new ListResponse <VSGalleryQAThread>(); IEnumerable <VSGalleryQAThread> filtered = GetAllThreads(); if (!string.IsNullOrWhiteSpace(request.ContainsText)) { var contains = StringHelper.RemoveDiacritics(request.ContainsText.TrimToEmpty()).ToLowerInvariant(); Func <string, bool> match = s => StringHelper.RemoveDiacritics(s ?? "") .ToLowerInvariant().IndexOf(contains) >= 0; filtered = filtered.Where(x => match(x.Title) || match(x.StartedByName) || match(x.ThreadId.ToString()) || x.Posts.Any(p => match(p.Message) || match(p.PostedByName))); } response.TotalCount = filtered.Count(); response.Skip = request.Skip; response.Take = request.Take; if (request.Skip > 0) { filtered = filtered.Skip(request.Skip); } if (request.Take > 0) { filtered = filtered.Take(request.Take); } response.Entities = filtered.ToList(); return(response); }