現在、検索結果に問題があります。ユーザーはカテゴリ、タイプ、価格などのさまざまなアイテムを検索できます。問題は、複数のカテゴリを選択したときに返されたリストがアイテムを返さないことです。 私は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));
それはすでにだったが、ただ申し訳ありませんが、コードには示されていません! – Bombebak