EF Core 3.1搜索过滤器

时间:2020-04-29 06:58:42

标签: ef-core-3.1

我正在尝试创建具有很多选项(字符串输入,选择输入...)的搜索过滤器。如果categoryId大于0,我需要按类别过滤标签,如果categoryId等于0,则返回具有所有相关类别的所有标签(或者不对搜索应用类别选项)。但是我的代码在两种情况下都不会返回任何类别,也不会给我任何错误。我在互联网上发现了许多示例,这些示例仅显示一个字符串输入是如何工作的。

        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 :(得分:0)

正确的代码是:

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);
    }