一、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;
}2016 © donet5.comApache Licence 2.0