需求描识:当我们查询时,要根据前端传的参数字段是否为空来查询,字段为空则返回全部,不为空则只返回匹配的参数
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();