需求描识:当我们查询时,要根据前端传的参数字段是否为空来查询,字段为空则返回全部,不为空则只返回匹配的参数

sqlsugar官方文档写的挺详细的了,也可以去看看,下面我也只是加了一些注释方便理解
直接上代码,下面我们定义了一个查询构造器,OrIF的意思也就是表面意思,if如果为真则加上or语句,第一个参数则是判断字段是否为空,为空则返回false,后面的查询语句也就不生效。

 var exp = Expressionable.Create<Tags>();    //查询构造器
exp.OrIF(id.HasValue, it => it.Id == id);           //id为空时则不需要判断,返回全部数据
exp.AndIF(!string.IsNullOrWhiteSpace(tagname), it => it.TagName.Contains(tagname!));   //tagname为空时则不需要后面的判断
 tags = await DbScoped.SugarScope.Queryable<Tags>().Where(exp.ToExpression()).ToListAsync();

我们也可以这样写

  var tags = await DbScoped.SugarScope.Queryable<Tags>().Where(
                Expressionable.Create<Tags>().
                OrIF(id.HasValue, it => it.Id == id)
                .AndIF(!string.IsNullOrWhiteSpace(tagname), it => it.TagName.Contains(tagname!))
                .ToExpression()
                ).ToListAsync();
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐