mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-11-08 02:14:53 +08:00
Update Filter
This commit is contained in:
@@ -12,65 +12,68 @@ namespace OrmTest
|
|||||||
{
|
{
|
||||||
Console.WriteLine("");
|
Console.WriteLine("");
|
||||||
Console.WriteLine("#### Filter Start ####");
|
Console.WriteLine("#### Filter Start ####");
|
||||||
var db = GetInstance();
|
|
||||||
|
|
||||||
|
TableFilterDemo();
|
||||||
|
|
||||||
var sql = db.Queryable<Order>().ToSql();
|
NameFilterDemo();
|
||||||
//SELECT [Id],[Name],[Price],[CreateTime] FROM [Order] WHERE isDelete=0
|
|
||||||
Console.WriteLine(sql);
|
|
||||||
|
|
||||||
|
|
||||||
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 ####");
|
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()
|
public static SqlSugarClient GetInstance()
|
||||||
{
|
{
|
||||||
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig() { DbType = DbType.SqlServer, ConnectionString = Config.ConnectionString, IsAutoCloseConnection = true });
|
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig() { DbType = DbType.SqlServer, ConnectionString = Config.ConnectionString, IsAutoCloseConnection = true });
|
||||||
|
db.Aop.OnLogExecuted = (sql, p) =>
|
||||||
//single table query gobal filter
|
|
||||||
db.QueryFilter.Add(new SqlFilterItem()
|
|
||||||
{
|
{
|
||||||
FilterValue = filterDb =>
|
Console.WriteLine(sql);
|
||||||
{
|
};
|
||||||
//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'" };
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return db;
|
return db;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -303,8 +303,7 @@ namespace SqlSugar
|
|||||||
AppendTableFilter(item);
|
AppendTableFilter(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
foreach (var item in gobalFilterList.Where(it=>it.GetType().Name=="SqlFilterItem").Where(it => it.IsJoinQuery == !IsSingle()))
|
||||||
foreach (var item in gobalFilterList.Where(it => it.IsJoinQuery == !IsSingle()))
|
|
||||||
{
|
{
|
||||||
var filterResult = item.FilterValue(this.Context);
|
var filterResult = item.FilterValue(this.Context);
|
||||||
WhereInfos.Add(this.Builder.AppendWhereOrAnd(this.WhereInfos.IsNullOrEmpty(), filterResult.Sql + UtilConstants.Space));
|
WhereInfos.Add(this.Builder.AppendWhereOrAnd(this.WhereInfos.IsNullOrEmpty(), filterResult.Sql + UtilConstants.Space));
|
||||||
@@ -353,7 +352,7 @@ namespace SqlSugar
|
|||||||
var easyInfo = EasyJoinInfos.FirstOrDefault(it =>
|
var easyInfo = EasyJoinInfos.FirstOrDefault(it =>
|
||||||
it.Value.Equals(entityInfo.DbTableName, StringComparison.CurrentCultureIgnoreCase) ||
|
it.Value.Equals(entityInfo.DbTableName, StringComparison.CurrentCultureIgnoreCase) ||
|
||||||
it.Value.Equals(entityInfo.EntityName, 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);
|
sql = sql.Replace(itName, shortName);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -361,7 +360,7 @@ namespace SqlSugar
|
|||||||
var easyInfo = JoinQueryInfos.FirstOrDefault(it =>
|
var easyInfo = JoinQueryInfos.FirstOrDefault(it =>
|
||||||
it.TableName.Equals(entityInfo.DbTableName, StringComparison.CurrentCultureIgnoreCase) ||
|
it.TableName.Equals(entityInfo.DbTableName, StringComparison.CurrentCultureIgnoreCase) ||
|
||||||
it.TableName.Equals(entityInfo.EntityName, 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);
|
sql = sql.Replace(itName, shortName);
|
||||||
}
|
}
|
||||||
WhereInfos.Add(sql);
|
WhereInfos.Add(sql);
|
||||||
|
|||||||
Reference in New Issue
Block a user