Entity Framework Core - добавление условного предложения where - PullRequest
0 голосов
/ 20 февраля 2019

Я пытаюсь добавить дополнительное предложение where, если через URL передается определенный queryParameter, но, похоже, он не работает.Прежде чем приступить к выполнению raw sql, я хочу сначала выяснить, правильно ли я это делаю (документация кажется минимальной для этого, поскольку я ничего не могу найти)

Код для краткости свернут

public IActionResult RetrieveAll([FromQuery] string orderByDate, [FromQuery] string taskStatus)
{
    try
    {
        var taskQuery = (from t in _context.Tasks select t);
        switch(taskStatus)
        {
            case "completed":
                taskQuery.Where(t => t.IsCompleted == true);
                break;
            case "notcompleted":
                taskQuery.Where(t => t.IsCompleted == false);
                break;
        }

        var tasks = taskQuery.ToList();
        return Ok(tasks);
    }
    catch (Exception ex)
    {
        return BadRequest();
    }

}

Я думал, что простое добавление предложения Where сделает это.Код выполняет правильный путь кода, но все равно возвращается со всеми результатами.

1 Ответ

0 голосов
/ 20 февраля 2019

Вы определяете базовый запрос здесь:

var taskQuery = (from t in _context.Tasks select t);

Позже вы вызываете метод расширения .Where(...) для запроса для дальнейшей фильтрации запроса:

 case "completed":
        taskQuery.Where(t => t.IsCompleted == true);
        break;

Однако, .Where(...) не заменяет IQueryable, оно возвращает new IQueryable.Как вы отметили в комментариях, вам нужно заменить запрос новым запросом, чтобы ваш вызов на .ToList() позже дал ожидаемые результаты.

Вот так:

taskQuery = taskQuery.Where(t => t.IsCompleted == true);

Вот такдовольно распространенный шаблон для «создания» запросов в Entity Framework, так что вы определенно на правильном пути!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...