全局过滤器概念

一、FilterName

为全局过滤器名称,如果为NULL则表示全局过滤器


二、FilterValue 

获取 Sql和SqlParamter的方法

如果方法内部要用到数据库操作请使用 filterDb

FilterValue = filterDb =>
{
      //filterDb来操作数据库
    return new SqlFilterResult() { Sql = " id>@id", Parameters = new { id = 1 } };
}

      

三、IsJoinQuery 

是单表查询还是多表查询,默认单表查询,因为我们生的SQL单表和多表是有区别的所以过滤器也是区分开的

例如:

单表:  id=1 

多表:  m.id=1

生成的SQL如果不区分开过滤器就会报错


例子

只有单表全局过滤器生效

var sql = db.Queryable<Student>().ToSql();
//SELECT [ID],[SchoolId],[Name],[CreateTime] FROM [STudent]  WHERE  isDelete=0



只有多表全局过滤器生效 (sqlSugar 4.4支持了 .Select().MergeTable()可以将多表变成单表 这样你就只要用单表过滤器就行了 

var sql2 = db.Queryable<Student, School>((f, s) => new object[] { JoinType.Left, f.SchoolId == s.Id }).ToSql();
//SELECT[f].[ID],[f].[SchoolId],[f].[Name],[f].[CreateTime]
//FROM[STudent] f Left JOIN School s ON([f].[SchoolId] = [s].[Id])   WHERE f.isDelete=0



全局过滤器和query1的过滤器生效

var sql3 = db.Queryable<Student>().Filter("query1").ToSql();
//SELECT [ID],[SchoolId],[Name],[CreateTime] FROM [STudent]  WHERE  WHERE  id>@id  AND  isDelete=0


只有query1的过滤器生效

string key = "query1";
var sql4 = db.Queryable<Student>().Filter(key,true).ToSql();//.Filter(null,true)所有过滤器都不生效
//SELECT [ID],[SchoolId],[Name],[CreateTime] FROM [STudent]  WHERE  WHERE  id>@id


过滤器的定义

      public static SqlSugarClient GetInstance1()
        {
            SqlSugarClient db = new SqlSugarClient(new ConnectionConfig() 
            { ConnectionString = Config.ConnectionString, DbType = DbType.SqlServer,
             IsAutoCloseConnection = true });
            db.QueryFilter
             .Add(new SqlFilterItem()//单表全局过滤器
             {
                 FilterValue = filterDb =>
                 {
                     return new SqlFilterResult() { Sql = " isDelete=0" };
                 },
                 IsJoinQuery = false 
             }).Add(new SqlFilterItem()//多表全局过滤器
             {
                 FilterValue = filterDb =>
                 {
                     return new SqlFilterResult() { Sql = " f.isDelete=0" };
                 },
                 IsJoinQuery = true
             })
            .Add(new SqlFilterItem() //qurery1过滤器
            {
                FilterName = "query1",
                FilterValue = filterDb =>
                {
                    return new SqlFilterResult() { Sql = " id>@id", Parameters = new { id = 1 } };
                },
                IsJoinQuery = false
            });
            return db;
        }


收藏到朋友圈: