feat: 支持模糊查询
This commit is contained in:
parent
2232cd2eb9
commit
32cc5c184a
|
@ -19,12 +19,27 @@ namespace BootstrapAdmin.Web.Extensions
|
|||
/// </summary>
|
||||
/// <typeparam name="TModel"></typeparam>
|
||||
/// <returns></returns>
|
||||
public static Task<List<TModel>> FetchAsync<TModel>(this IDatabase db, IEnumerable<IFilterAction> where, string? sortName = null, SortOrder sortOrder = SortOrder.Unset)
|
||||
public static Task<List<TModel>> FetchAsync<TModel>(this IDatabase db, QueryPageOptions options)
|
||||
{
|
||||
var exp = where.GetFilterLambda<TModel>();
|
||||
var sql = new Sql();
|
||||
AnalysisExpression(exp, db, sql);
|
||||
|
||||
// 处理模糊查询
|
||||
if (options.Searchs.Any())
|
||||
{
|
||||
var searchTextSql = new Sql();
|
||||
AnalysisExpression(options.Searchs.GetFilterLambda<TModel>(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<TModel>(), 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
|
|||
/// </summary>
|
||||
/// <typeparam name="TModel"></typeparam>
|
||||
/// <returns></returns>
|
||||
public static Task<Page<TModel>> PageAsync<TModel>(this IDatabase db, long pageIndex, long pageItems, IEnumerable<IFilterAction> where, string? sortName = null, SortOrder sortOrder = SortOrder.Unset)
|
||||
public static Task<Page<TModel>> PageAsync<TModel>(this IDatabase db, QueryPageOptions options)
|
||||
{
|
||||
var exp = where.GetFilterLambda<TModel>();
|
||||
var sql = new Sql();
|
||||
AnalysisExpression(exp, db, sql);
|
||||
|
||||
// 处理模糊查询
|
||||
if (options.Searchs.Any())
|
||||
{
|
||||
var searchTextSql = new Sql();
|
||||
AnalysisExpression(options.Searchs.GetFilterLambda<TModel>(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<TModel>(), 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<TModel>(pageIndex, pageItems, sql);
|
||||
return db.PageAsync<TModel>(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;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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<TModel>(option.PageIndex, option.PageItems, filters, option.SortName, option.SortOrder);
|
||||
var items = await Database.PageAsync<TModel>(option);
|
||||
|
||||
ret.TotalCount = Convert.ToInt32(items.TotalItems);
|
||||
ret.Items = items.Items;
|
||||
}
|
||||
else
|
||||
{
|
||||
var items = await Database.FetchAsync<TModel>(filters, option.SortName, option.SortOrder);
|
||||
var items = await Database.FetchAsync<TModel>(option);
|
||||
ret.TotalCount = items.Count;
|
||||
ret.Items = items;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue