В настоящее время у меня возникают проблемы с результатами поиска. Пользователь может искать различные элементы, такие как категории, типы, цена и т. Д. Проблема в том, что мой возвращенный список не возвращает элементы, когда я выбрал несколько категорий. У меня есть представление, которое отправляет запрос 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));
Это уже было, но только не показано в коде, извините! – Bombebak