diff --git a/src/blazor/admin/BootstrapAdmin.DataAccess.PetaPoco/Extensions/DatabaseExtensions.cs b/src/blazor/admin/BootstrapAdmin.DataAccess.PetaPoco/Extensions/DatabaseExtensions.cs
index a4c00840..d101e5cc 100644
--- a/src/blazor/admin/BootstrapAdmin.DataAccess.PetaPoco/Extensions/DatabaseExtensions.cs
+++ b/src/blazor/admin/BootstrapAdmin.DataAccess.PetaPoco/Extensions/DatabaseExtensions.cs
@@ -19,12 +19,27 @@ namespace BootstrapAdmin.Web.Extensions
///
///
///
- public static Task> FetchAsync(this IDatabase db, IEnumerable where, string? sortName = null, SortOrder sortOrder = SortOrder.Unset)
+ public static Task> FetchAsync(this IDatabase db, QueryPageOptions options)
{
- var exp = where.GetFilterLambda();
var sql = new Sql();
- AnalysisExpression(exp, db, sql);
+ // 处理模糊查询
+ if (options.Searchs.Any())
+ {
+ var searchTextSql = new Sql();
+ AnalysisExpression(options.Searchs.GetFilterLambda(FilterLogic.Or), db, searchTextSql);
+ sql.Append(searchTextSql.ToString().Replace("\nAND", "\nOR"), searchTextSql.Arguments);
+ }
+
+ // 处理高级搜索与过滤
+ var filters = options.Filters.Concat(options.CustomerSearchs);
+ if (filters.Any())
+ {
+ AnalysisExpression(filters.GetFilterLambda(), db, sql);
+ }
+
+ var sortName = options.SortName;
+ var sortOrder = options.SortOrder;
if (!string.IsNullOrEmpty(sortName) && sortOrder != SortOrder.Unset)
{
sql.OrderBy(sortOrder == SortOrder.Asc ? sortName : $"{sortName} desc");
@@ -37,17 +52,33 @@ namespace BootstrapAdmin.Web.Extensions
///
///
///
- public static Task> PageAsync(this IDatabase db, long pageIndex, long pageItems, IEnumerable where, string? sortName = null, SortOrder sortOrder = SortOrder.Unset)
+ public static Task> PageAsync(this IDatabase db, QueryPageOptions options)
{
- var exp = where.GetFilterLambda();
var sql = new Sql();
- AnalysisExpression(exp, db, sql);
+
+ // 处理模糊查询
+ if (options.Searchs.Any())
+ {
+ var searchTextSql = new Sql();
+ AnalysisExpression(options.Searchs.GetFilterLambda(FilterLogic.Or), db, searchTextSql);
+ sql.Append(searchTextSql.ToString().Replace("\nAND", "OR"), searchTextSql.Arguments);
+ }
+
+ // 处理高级搜索与过滤
+ var filters = options.Filters.Concat(options.CustomerSearchs);
+ if (filters.Any())
+ {
+ AnalysisExpression(filters.GetFilterLambda(), db, sql);
+ }
+
+ var sortName = options.SortName;
+ var sortOrder = options.SortOrder;
if (!string.IsNullOrEmpty(sortName) && sortOrder != SortOrder.Unset)
{
sql.OrderBy(sortOrder == SortOrder.Asc ? sortName : $"{sortName} desc");
}
- return db.PageAsync(pageIndex, pageItems, sql);
+ return db.PageAsync(options.PageIndex, options.PageItems, sql);
}
private static void AnalysisExpression(Expression expression, IDatabase db, Sql sql)
@@ -67,6 +98,13 @@ namespace BootstrapAdmin.Web.Extensions
AnalysisExpression(andExp.Right, db, sql);
}
break;
+ case ExpressionType.OrElse:
+ if (expression is BinaryExpression orExp)
+ {
+ AnalysisExpression(orExp.Left, db, sql);
+ AnalysisExpression(orExp.Right, db, sql);
+ }
+ break;
case ExpressionType.Call:
if (expression is MethodCallExpression callExp)
{
@@ -122,7 +160,6 @@ namespace BootstrapAdmin.Web.Extensions
}
}
break;
-
}
}
diff --git a/src/blazor/admin/BootstrapAdmin.DataAccess.PetaPoco/Services/DefaultDataService.cs b/src/blazor/admin/BootstrapAdmin.DataAccess.PetaPoco/Services/DefaultDataService.cs
index 06d3bc9e..710979a1 100644
--- a/src/blazor/admin/BootstrapAdmin.DataAccess.PetaPoco/Services/DefaultDataService.cs
+++ b/src/blazor/admin/BootstrapAdmin.DataAccess.PetaPoco/Services/DefaultDataService.cs
@@ -67,17 +67,16 @@ namespace BootstrapBlazor.DataAcces.PetaPoco.Services
IsSearch = true
};
- var filters = option.Filters.Concat(option.Searchs).Concat(option.CustomerSearchs);
if (option.IsPage)
{
- var items = await Database.PageAsync(option.PageIndex, option.PageItems, filters, option.SortName, option.SortOrder);
+ var items = await Database.PageAsync(option);
ret.TotalCount = Convert.ToInt32(items.TotalItems);
ret.Items = items.Items;
}
else
{
- var items = await Database.FetchAsync(filters, option.SortName, option.SortOrder);
+ var items = await Database.FetchAsync(option);
ret.TotalCount = items.Count;
ret.Items = items;
}