2016-12-25 10 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; 
} 

1つのカテゴリのみをクリックすると、正しい項目が読み込まれます。私は配列(まだ運がない)でforeachを試しましたが、Visual Studioはエラー({"メソッドはType.IsGenericParameterが真である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

関連する問題