Pageddatasource失败分页“没有实现ICollection”。

时间:2012-07-11 08:16:55

标签: c# asp.net repeater datasource paging

我有一个Repeater,我需要分页,所以我正在使用PagedDatasource。

鉴于:

string tag = Request.QueryString["category"];

并且标记变量不为空,然后PagedDataSource失败分页,并出现以下错误:

  

异常详细信息:System.Web.HttpException:无法计算Count for   未实现ICollection的数据源。

在这一行:

lblCurrentPage.Text = "Page: " + (CurrentPage + 1).ToString() + " of " + pagedDS.PageCount.ToString();

注意:当标记变量为空时,分页工作正常。

以下完整代码:

string tag = Request.QueryString["category"];
var ba = new DataBase.BlogAdapter();

PagedDataSource pagedDS = new PagedDataSource();
pagedDS.AllowPaging = true;
pagedDS.PageSize = 3;

if (String.IsNullOrEmpty(tag))
{
    pagedDS.DataSource = ba.GetArticles(null, null);
}
else
{
    var t = new DataBase.Tag() { TagName = tag };
    var tec = new DataBase.TagEqualityComparer();
    pagedDS.DataSource = ba.GetArticles(null, null).Where(a => a.Tags.Contains(t, tec));
    CurrentPage = 0;
}

pagedDS.CurrentPageIndex = CurrentPage;

// NEXT LINE FAILS IF "tag" IS NOT EMPTY
lblCurrentPage.Text = "Page: " + (CurrentPage + 1).ToString() + " of " + pagedDS.PageCount.ToString(); 

1 个答案:

答案 0 :(得分:2)

您可能需要将过滤器具体化为集合,例如

ba.GetArticles(null, null).Where(a => a.Tags.Contains(t, tec)).ToList();

IQueryable<>仅实施IEnumerable,而IList<>实施ICollection