2016-12-25 247 views
0

我目前遇到了我的搜索结果问题。用户可以搜索不同的项目,例如类别,类型,价格等。问题是,当我选择多个类别时,返回的列表不会返回项目。 我有一个视图通过ajax提交GET请求,数据正确加载到传递给我的方法返回匹配结果的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为true的Type上调用。”})。

在IsGenericParameter属性为false的类型上获取DeclaringMethod属性将引发InvalidOperationException。 - MSND文档

添加匹配结果与所选类别的正确方法是什么?

我找到了解决方案! 这为我工作: result = result.Where(x => viewModel.SelectedCategory.Any(y => y == x.CategoryId));

回答

1

Chnage返回值你的行动来:

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

这已经是只是在代码中没有显示,对不起! – Bombebak