Table filter support append on

This commit is contained in:
sunkaixuna 2022-01-21 10:22:34 +08:00
parent bfc99eb334
commit 6ff16c284e
3 changed files with 27 additions and 4 deletions

View File

@ -23,8 +23,9 @@ namespace OrmTest
{ {
var db = GetInstance(); var db = GetInstance();
//Order add filter //Order add filter
db.QueryFilter.Add(new TableFilterItem<Order>(it => it.Name.Contains("a"))); db.QueryFilter.Add(new TableFilterItem<Order>(it => it.Name.Contains("a"),true));
db.Queryable<Order>().ToList();
db.Queryable<Order>().ToList(); db.Queryable<Order>().ToList();
//SELECT [Id],[Name],[Price],[CreateTime],[CustomId] FROM [Order] WHERE ([Name] like '%'+@MethodConst0+'%') //SELECT [Id],[Name],[Price],[CreateTime],[CustomId] FROM [Order] WHERE ([Name] like '%'+@MethodConst0+'%')
@ -40,6 +41,8 @@ namespace OrmTest
//no filter //no filter
db.Queryable<Order>().Filter(null, false).ToList(); db.Queryable<Order>().Filter(null, false).ToList();
//SELECT [Id],[Name],[Price],[CreateTime],[CustomId] FROM [Order] //SELECT [Id],[Name],[Price],[CreateTime],[CustomId] FROM [Order]
db.Queryable<OrderItem>().LeftJoin<Order>((x, y) => x.ItemId == y.Id).ToList();
} }

View File

@ -384,7 +384,24 @@ namespace SqlSugar
sql = GetSql(exp, isSingle); sql = GetSql(exp, isSingle);
sql = sql.Replace(itName, shortName); sql = sql.Replace(itName, shortName);
} }
WhereInfos.Add(sql); if (item.IsJoinQuery == false||isMain||isSingle|| isEasyJoin)
{
WhereInfos.Add(sql);
}
else
{
foreach (var joinInfo in this.JoinQueryInfos)
{
if (joinInfo.TableName.EqualCase(entityInfo.EntityName)|| joinInfo.TableName.EqualCase(entityInfo.DbTableName))
{
if (sql.StartsWith(" WHERE "))
{
sql = Regex.Replace(sql, $"^ WHERE ", " AND ");
}
joinInfo.JoinWhere=joinInfo.JoinWhere + sql;
}
}
}
} }
private string GetSql(Expression exp, bool isSingle) private string GetSql(Expression exp, bool isSingle)

View File

@ -27,16 +27,19 @@ namespace SqlSugar
} }
private Expression exp { get; set; } private Expression exp { get; set; }
private Type type { get; set; } private Type type { get; set; }
public TableFilterItem(Expression<Func<T,bool>> expression) public TableFilterItem(Expression<Func<T,bool>> expression,bool isJoinOn=false)
{ {
exp = expression; exp = expression;
type = typeof(T); type = typeof(T);
base.IsJoinQuery = isJoinOn;
this.IsJoinQuery = isJoinOn;
} }
public TableFilterItem(Type entityType,Expression expression) public TableFilterItem(Type entityType,Expression expression, bool isJoinOn=false)
{ {
exp = expression; exp = expression;
type = entityType; type = entityType;
IsJoinQuery = isJoinOn;
} }
private new string FilterName { get; set; } private new string FilterName { get; set; }