EF Core 3.1 поисковый фильтр - PullRequest
       20

EF Core 3.1 поисковый фильтр

0 голосов
/ 29 апреля 2020

Я пытаюсь создать поисковый фильтр с большим количеством опций (ввод строки, выбор ввода ...). Мне нужно отфильтровать теги по категориям, если categoryId больше 0, если categoryId равен 0, вернуть все теги со всеми связанными категориями (или не применять параметр категории для поиска). Но мой код не возвращает никаких категорий в обоих случаях и не дает мне ошибок. Множество примеров в inte rnet, которые я нашел, показывают, как работает только один ввод строки.

        IQueryable<Tag> tags = _context.Tag
                                .Where(s => EF.Functions.Like(s.Name, "%" + name + "%"))
                                .Where(s => EF.Functions.Like(s.Description, "%" + description + "%"))
                                .Include(s => s.Value)
                                .Include(s => s.Period);     
        if (categoryId > 0)
        {
            tags.Include(s => s.Category).Where(s => s.Category.CategoryId == categoryId);
        }
        else
        {
            tags.Include(s => s.Category);
        }

Может кто-нибудь объяснить, почему мой код не работает? И как реализовать этот функционал? Спасибо.

1 Ответ

0 голосов
/ 29 апреля 2020

Правильный код:

IQueryable<Tag> tags = _context.Tag
                            .Where(s => EF.Functions.Like(s.Name, "%" + name + "%"))
                            .Where(s => EF.Functions.Like(s.Description, "%" + description + "%"))
                            .Include(s => s.Value)
                            .Include(s => s.Period);     
    if (categoryId > 0)
    {
        tags = tags.Include(s => s.Category).Where(s => s.Category.CategoryId == categoryId);
    }
    else
    {
        tags = tags.Include(s => s.Category);
    }
...