From f5b1dccd2cda637bf82568687b1654a97c8babd2 Mon Sep 17 00:00:00 2001 From: skx <610262374@qq.com> Date: Sat, 30 Jan 2021 14:05:58 +0800 Subject: [PATCH] Update Filter --- .../SqlServerTest/Demo/Democ_GobalFilter.cs | 103 +++++++++--------- .../SqlBuilderProvider/QueryBuilder.cs | 7 +- 2 files changed, 56 insertions(+), 54 deletions(-) diff --git a/Src/Asp.Net/SqlServerTest/Demo/Democ_GobalFilter.cs b/Src/Asp.Net/SqlServerTest/Demo/Democ_GobalFilter.cs index 2406df714..e194f4b67 100644 --- a/Src/Asp.Net/SqlServerTest/Demo/Democ_GobalFilter.cs +++ b/Src/Asp.Net/SqlServerTest/Demo/Democ_GobalFilter.cs @@ -12,65 +12,68 @@ namespace OrmTest { Console.WriteLine(""); Console.WriteLine("#### Filter Start ####"); - var db = GetInstance(); + TableFilterDemo(); - var sql = db.Queryable().ToSql(); - //SELECT [Id],[Name],[Price],[CreateTime] FROM [Order] WHERE isDelete=0 - Console.WriteLine(sql); + NameFilterDemo(); - - var sql2 = db.Queryable((main,ot)=> main.Id==ot.OrderId).ToSql(); - //SELECT [Id],[Name],[Price],[CreateTime] FROM [Order] main ,[OrderDetail] ot WHERE ( [main].[Id] = [ot].[OrderId] ) AND main.isDelete=0 - Console.WriteLine(sql2); - - - var sql3 = db.Queryable().Filter("Myfilter").ToSql();// Myfilter+Gobal - //SELECT [Id],[Name],[Price],[CreateTime] FROM [Order] WHERE Name='jack' AND isDelete=0 - Console.WriteLine(sql3); - - var sql4 = db.Queryable().Filter("Myfilter",isDisabledGobalFilter:true).ToSql();//only Myfilter - //SELECT [Id],[Name],[Price],[CreateTime] FROM [Order] WHERE Name='jack' - Console.WriteLine(sql4); Console.WriteLine("#### Filter End ####"); } - - + private static void TableFilterDemo() + { + var db = GetInstance(); + //Order add filter + db.QueryFilter.Add(new TableFilterItem(it => it.Name.Contains("a"))); + + + db.Queryable().ToList(); + //SELECT [Id],[Name],[Price],[CreateTime],[CustomId] FROM [Order] WHERE ([Name] like '%'+@MethodConst0+'%') + + db.Queryable((i, o) => i.OrderId == o.Id) + .Where(i => i.OrderId != 0) + .Select("i.*").ToList(); + //SELECT i.* FROM [OrderDetail] i ,[Order] o WHERE ( [i].[OrderId] = [o].[Id] ) AND ( [i].[OrderId] <> @OrderId0 ) AND ([o].[Name] like '%'+@MethodConst1+'%') + + //no filter + db.Queryable().Filter(null, false).ToList(); + //SELECT [Id],[Name],[Price],[CreateTime],[CustomId] FROM [Order] + } + + + private static void NameFilterDemo() + { + var db2 = GetInstance(); + db2.QueryFilter.Add(new SqlFilterItem() + { + FilterName = "Myfilter1", + FilterValue = it => + { + //Writable logic + return new SqlFilterResult() { Sql = " name like '%a%' " }; + } + }); + db2.Queryable() + .Where(it => it.Name == "jack") + .Filter("Myfilter1") + //IF .Filter("Myfilter",false) only execute Myfilter + .ToList(); + //SELECT [Id],[Name],[Price],[CreateTime],[CustomId] FROM [Order] + //WHERE ( [Name] = 'jack' ) AND name like '%a%' + + + //no filter + db2.Queryable().Filter(null, false).ToList(); + //SELECT [Id],[Name],[Price],[CreateTime],[CustomId] FROM [Order] + } + + public static SqlSugarClient GetInstance() { SqlSugarClient db = new SqlSugarClient(new ConnectionConfig() { DbType = DbType.SqlServer, ConnectionString = Config.ConnectionString, IsAutoCloseConnection = true }); - - //single table query gobal filter - db.QueryFilter.Add(new SqlFilterItem() + db.Aop.OnLogExecuted = (sql, p) => { - FilterValue = filterDb => - { - //Writable logic - return new SqlFilterResult() { Sql = " isDelete=0" };//Global string perform best - } - }); - - //Multi-table query gobal filter - db.QueryFilter.Add(new SqlFilterItem() - { - FilterValue = filterDb => - { - //Writable logic - return new SqlFilterResult() { Sql = " main.isDelete=0" }; - }, - IsJoinQuery=true - }); - - //Specific filters - db.QueryFilter.Add(new SqlFilterItem() - { - FilterName= "Myfilter", - FilterValue = filterDb => - { - //Writable logic - return new SqlFilterResult() { Sql = "Name='jack'" }; - } - }); + Console.WriteLine(sql); + }; return db; } } diff --git a/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs b/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs index 4b162c3a5..33e7ad609 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs @@ -303,8 +303,7 @@ namespace SqlSugar AppendTableFilter(item); } } - - foreach (var item in gobalFilterList.Where(it => it.IsJoinQuery == !IsSingle())) + foreach (var item in gobalFilterList.Where(it=>it.GetType().Name=="SqlFilterItem").Where(it => it.IsJoinQuery == !IsSingle())) { var filterResult = item.FilterValue(this.Context); WhereInfos.Add(this.Builder.AppendWhereOrAnd(this.WhereInfos.IsNullOrEmpty(), filterResult.Sql + UtilConstants.Space)); @@ -353,7 +352,7 @@ namespace SqlSugar var easyInfo = EasyJoinInfos.FirstOrDefault(it => it.Value.Equals(entityInfo.DbTableName, StringComparison.CurrentCultureIgnoreCase) || it.Value.Equals(entityInfo.EntityName, StringComparison.CurrentCultureIgnoreCase)); - var shortName = this.Builder.GetTranslationColumnName(easyInfo.Key) + "."; + var shortName = this.Builder.GetTranslationColumnName(easyInfo.Key.Trim()) + "."; sql = sql.Replace(itName, shortName); } else @@ -361,7 +360,7 @@ namespace SqlSugar var easyInfo = JoinQueryInfos.FirstOrDefault(it => it.TableName.Equals(entityInfo.DbTableName, StringComparison.CurrentCultureIgnoreCase) || it.TableName.Equals(entityInfo.EntityName, StringComparison.CurrentCultureIgnoreCase)); - var shortName = this.Builder.GetTranslationColumnName(easyInfo.ShortName) + "."; + var shortName = this.Builder.GetTranslationColumnName(easyInfo.ShortName.Trim()) + "."; sql = sql.Replace(itName, shortName); } WhereInfos.Add(sql);