我在我的项目中使用了Troy Goode 的分页列表。
通常你只需给它一个 IEnumerable、一个 startindex 和一个项目计数,它就可以工作了。
但是,现在我正在尝试为它提供一个我生成的 IEnumerable,如下所示:
private static IEnumerable<Color> GetColors(Query query)
{
IndexSearcher searcher = new IndexSearcher(luceneIndexpath);
Hits hitColl = searcher.Search(query);
//Get all the unique colorId's
List<int> ids = new List<int>();
int id = 0;
for (int i = 0; i < hitColl.Length(); i++)
{
if (Int32.TryParse(hitColl.Doc(i).GetField("id").StringValue(), out id))
ids.Add(id);
}
foreach (int uniqueId in ids.Distinct<int>())
{
yield return ColorService.GetColor(uniqueId);
}
}
--EDIT-- pagedList 有效,但请求我的所有 Color 对象的收益,而不仅仅是分页的对象。这当然会破坏 PagedList 的整个使用,并可能导致大量枚举。
--EDIT--
我认为我需要的是一种实现 Count() 的方法,这样我就可以让它从 ids.Distinct(int) 返回计数,而不是通过 ColorService.GetColor() 创建所有对象,然后计算该列表.