private IQueryable <TGuitar> ApplyFilteringFor <TGuitar>(IGuitarRepository <TGuitar> repo, FilterDataModel filter) where TGuitar : GuitarModel { var all = repo.GetAll(); if (SearchItemsExist(filter.SearchItems)) { var searchItems = filter.SearchItems; all = all.Where(guitar => searchItems.All(item => guitar.Vendor.Name.ToLower().Contains(item) || guitar.Model.ToLower().Contains(item))); } if (PriceFilterExists(filter.PriceFilter)) { var from = filter.PriceFilter.From; var to = filter.PriceFilter.To; all = all.Where(g => from <= g.Price && g.Price <= to); } if (VendorFilterExists(filter.VendorFilter)) { var vendors = filter.VendorFilter.Vendors.Select(v => v.Name); all = all.Where(g => vendors.Contains(g.Vendor.Name)); } return(all); }