2016-12-25 2 views
0

В настоящее время у меня возникают проблемы с результатами поиска. Пользователь может искать различные элементы, такие как категории, типы, цена и т. Д. Проблема в том, что мой возвращенный список не возвращает элементы, когда я выбрал несколько категорий. У меня есть представление, которое отправляет запрос GET через ajax, и данные правильно загружаются в метод действия mvc, который передается моему методу, который возвращает результаты сопоставления. Категории отправляются как массив в viewModel. Добавить совпадение из массива в список

public IEnumerable<AdSearchViewModel> GetItemsFromSearch(AdSearchViewModel viewModel) 
{ 
    var result = from a in _dbContext.AdTable 
        select new AdSearchViewModel 
        { 
         Id = a.Id, 
         Name = a.Name, 
         CategoryId = a.CategoryId, 
         TypeId = a.TypeId, 
         Brand = a.Brand, 
         Price = a.Price, 
         Description = a.Description 
        }; 
    if (viewModel != null) 
    { 
     if (viewModel.Id.HasValue) 
      result = result.Where(x => x.Id == viewModel.Id); 
     if (viewModel.SelectedCategory != null && viewModel.SelectedCategory.Length > 0) 
     { 
      result = viewModel.SelectedCategory.Aggregate(result, (current, item) => current.Where(x => x.CategoryId == item)); 
     } 
     if (!string.IsNullOrEmpty(viewModel.Name)) 
      result = result.Where(x => x.Name.Contains(viewModel.Name)); 
     if (!string.IsNullOrEmpty(viewModel.Brand)) 
      result = result.Where(x => x.Brand.Contains(viewModel.Brand)); 
     if (viewModel.PriceFrom.HasValue) 
      result = result.Where(x => x.Price >= viewModel.PriceFrom); 
     if (viewModel.PriceFrom.HasValue) 
      result = result.Where(x => x.Price <= viewModel.PriceTo); 
    } 
    //TODO: return newest 
    return result; 
} 

Правильные элементы загружаются, когда я нажимаю только одну категорию. Я попытался использовать foreach с массивом (все равно не повезло), но Visual Studio предложила агрегированную функцию, которая вызвала ошибку ({«Метод может быть вызван только для типа, для которого Type.IsGenericParameter является истинным».}).

Получение свойства DeclivingMethod типа, свойство IsGenericParameter которого ложно, вызывает исключение InvalidOperationException. - Документация MSND

Каков правильный способ добавить результат соответствия выбранным категориям?

Я нашел решение! Это работает для меня: result = result.Where(x => viewModel.SelectedCategory.Any(y => y == x.CategoryId));

ответ

1

Chnage возвращаемое значение вашего действия на:

public IEnumerable<AdSearchViewModel> GetItemsFromSearch(AdSearchViewModel viewModel) 
+0

Это уже было, но только не показано в коде, извините! – Bombebak

Смежные вопросы