@code {
private static readonly Random random = new Random();
///
///
///
///
protected static List GenerateItems() => new List(Enumerable.Range(1, 80).Select(i => new BindItem()
{
Id = i,
Name = $"张三 {i:d4}",
DateTime = DateTime.Now.AddDays(i - 1),
Address = $"上海市普陀区金沙江路 {random.Next(1000, 2000)} 弄",
Count = random.Next(1, 100),
Complete = random.Next(1, 100) > 50
}));
///
///
///
protected static IEnumerable Items { get; } = GenerateItems();
///
///
///
protected IEnumerable PageItemsSource => new int[] { 2, 4, 10, 20 };
///
///
///
///
///
protected Task> OnQueryAsync(QueryPageOptions options) => BindItemQueryAsync(Items, options);
///
///
///
///
///
protected Task IntFormatter(object? d)
{
var data = (int?)d;
return Task.FromResult(data?.ToString("0.00") ?? "");
}
///
///
///
///
///
///
protected Task> BindItemQueryAsync(IEnumerable items, QueryPageOptions options)
{
//TODO: 此处代码后期精简
if (!string.IsNullOrEmpty(SearchModel.Name)) items = items.Where(item => item.Name?.Contains(SearchModel.Name, StringComparison.OrdinalIgnoreCase) ?? false);
if (!string.IsNullOrEmpty(SearchModel.Address)) items = items.Where(item => item.Address?.Contains(SearchModel.Address, StringComparison.OrdinalIgnoreCase) ?? false);
if (!string.IsNullOrEmpty(options.SearchText)) items = items.Where(item => (item.Name?.Contains(options.SearchText) ?? false)
|| (item.Address?.Contains(options.SearchText) ?? false));
// 过滤
var isFiltered = false;
if (options.Filters.Any())
{
items = items.Where(options.Filters.GetFilterFunc());
// 通知内部已经过滤数据了
isFiltered = true;
}
// 排序
var isSorted = false;
if (!string.IsNullOrEmpty(options.SortName))
{
// 外部未进行排序,内部自动进行排序处理
var invoker = SortLambdaCache.GetOrAdd(typeof(BindItem), key => items.GetSortLambda().Compile());
items = invoker(items, options.SortName, options.SortOrder);
// 通知内部已经过滤数据了
isSorted = true;
}
// 设置记录总数
var total = items.Count();
// 内存分页
items = items.Skip((options.PageIndex - 1) * options.PageItems).Take(options.PageItems).ToList();
return Task.FromResult(new QueryData()
{
Items = items,
TotalCount = total,
IsSorted = isSorted,
IsFiltered = isFiltered,
IsSearch = !string.IsNullOrEmpty(SearchModel.Name) || !string.IsNullOrEmpty(SearchModel.Address)
});
}
}