namespace Try_More_On_IEnumerable
static void Main(string[] args)
Console.WriteLine($"运行成功,{DateTime.Now:O}");
namespace Try_More_On_IEnumerable
using System.Collections.Generic;
var emptyData = Enumerable.Empty<int>().ToArray();
var memoryData = new[] {0, 1, 2};
var redisData = emptyData;
var elasticSearchData = emptyData;
var databaseData = emptyData;
var result = GetSourceData()
.ToPagination(pageCount, pageSize)
result.Should().HaveCount(2);
result[0].Should().Equal(0, 1);
result[1].Should().Equal(2);
memoryData = new[] {0, 1, 2};
redisData = new[] {3, 4, 5};
elasticSearchData = new[] {6, 7, 8};
databaseData = Enumerable.Range(9, 100).ToArray();
var result2 = GetSourceData()
.ToPagination(pageCount, pageSize)
result2.Should().HaveCount(5);
result2[0].Should().Equal(0, 1);
result2[1].Should().Equal(2, 3);
result2[2].Should().Equal(4, 5);
result2[3].Should().Equal(6, 7);
result2[4].Should().Equal(8, 9);
IEnumerable<int> GetSourceData()
var data = GetDataSource()
IEnumerable<IEnumerable<int>> GetDataSource()
yield return GetFromMemory();
yield return GetFromRedis();
yield return GetFromElasticSearch();
yield return GetFromDatabase();
IEnumerable<int> GetFromMemory()
Console.WriteLine("正在从内存中获取数据");
IEnumerable<int> GetFromRedis()
Console.WriteLine("正在从Redis中获取数据");
IEnumerable<int> GetFromElasticSearch()
Console.WriteLine("正在从ElasticSearch中获取数据");
return elasticSearchData;
IEnumerable<int> GetFromDatabase()
Console.WriteLine("正在从数据库中获取数据");
public static class EnumerableExtensions
public static IEnumerable<IEnumerable<int>> ToPagination(this IEnumerable<int> source,
var maxCount = pageCount * pageSize;
var onePage = new LinkedList<int>();
foreach (var i in source)
if (countNow == maxCount)
if (onePage.Count != pageSize)
onePage = new LinkedList<int>();