Update Filter

This commit is contained in:
skx 2021-01-30 14:05:58 +08:00
parent c318342d63
commit f5b1dccd2c
2 changed files with 56 additions and 54 deletions

View File

@ -12,65 +12,68 @@ namespace OrmTest
{
Console.WriteLine("");
Console.WriteLine("#### Filter Start ####");
var db = GetInstance();
TableFilterDemo();
var sql = db.Queryable<Order>().ToSql();
//SELECT [Id],[Name],[Price],[CreateTime] FROM [Order] WHERE isDelete=0
Console.WriteLine(sql);
NameFilterDemo();
var sql2 = db.Queryable<Order,OrderItem>((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<Order>().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<Order>().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<Order>(it => it.Name.Contains("a")));
db.Queryable<Order>().ToList();
//SELECT [Id],[Name],[Price],[CreateTime],[CustomId] FROM [Order] WHERE ([Name] like '%'+@MethodConst0+'%')
db.Queryable<OrderItem, Order>((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<Order>().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<Order>()
.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<Order>().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;
}
}

View File

@ -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);