@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) }); } }