Как я могу отфильтровать результаты базы данных из сообщения формы? - PullRequest
1 голос
/ 31 января 2020

Я почти уверен, что мое отсутствие понимания не позволяет мне заставить форму работать.

В настоящее время у меня есть форма, которая отправляет параметры фильтрации обратно в контроллер, а затем создает запрос. Текущие запросы, которые я строю, на самом деле ничего не делают. По крайней мере, когда это разделено так.

Из того, что я прочитал, что-то подобное должно работать, но из того, что я проверял, это не так.

[HttpPost]
public async Task<IActionResult> FilterPost()
{
    var query = _context.Products;
    query = query.OrderBy(m => m.Unit.Name)
         .Include(m => m.Unit)
         .Include(m => m.Attribute);

    foreach (var request in Request.Form)
    {
         var AttributeValue = request.Value;
         var AttributeName = request.Key;
         query = query.Where(m => m.Attribute.Name == AttributeName)
                      .Where(m => m.Value >= int.Parse(AttributeValue));
    }

    return RedirectToAction("Index");
}

Этот метод, вероятно, довольно неудачен со всеми тестами, которые я провел на нем.

Я уже рассматривал использование ExpressionTrees и DynamicLINQ раньше. Они делают шов смущающе интересным и, возможно, немного излишним, может быть? Я не знаю. Может быть, мой мозг просто слишком истощен, чтобы видеть очевидный ответ ...

Я был бы признателен за любые предложения относительно решения или намек на решение.

1 Ответ

0 голосов
/ 31 января 2020

Кроме того, установите точку останова и проверьте, что находится внутри request. Более того, вы фильтруете данные на основе полей request, но на каждой итерации l oop вы все больше и больше фильтруете результат, поэтому вам следует тщательно обдумать это.

Кроме того, при перенаправлении на Index Вы не передаете никаких данных, и я думаю, что вы должны передать туда результат query, чтобы вы могли использовать его и показать там. Поэтому я бы посмотрел на перегрузки RedirectToAction, такие как RedirectToAction(String, Object). В качестве альтернативы вы можете взглянуть на метод View с возможностями similair как RedirectToAction.

Сказав это, вы должны передать РЕЗУЛЬТАТЫ запроса, поэтому вам нужно получить результат запроса, для Например, вызывая метод ToList.

...