我有一个关于IQueriable的问题。也许我的理解是错误的,但我认为调用ToList()会强制执行查询。我有一个想要使用IQuerriable填充的PaginatedList类,但是当我这样做时,我得到了一系列空对象。谁能告诉我我哪里做错了。
public class PaginatedList<T> : List<T>
{
public PaginatedList(IQueryable<T> source, int pageIndex, int pageSize)
{
PageIndex = pageIndex;
PageSize = pageSize;
TotalCount = source.Count();
TotalPages = (int)Math.Ceiling(TotalCount / (double)PageSize);
List<T> temp = source.Skip(PageIndex * PageSize).Take(PageSize).ToList();
this.AddRange(temp);
}
} 我的临时列表中填满了默认值。我不明白。如能得到ANy的帮助,将不胜感激。
该列表的填充方式如下:
public IQueryable<Transaction> GetTransactions()
{
return from trx in pingDataContext.Table0
join pdo in pingDataContext.Table1
on trx.AssociatedID equals pdo.ID
where trx.Type == 1 &&
pdo.PortalID == 330
select new Transaction(trx.ID, pdo.CreateDate, pdo.Msisdn, pdo.Remarks, 0.1,
(double)pdo.Price, pdo.DnldLink, pdo.UserIP);
}我在这里创建我的分页列表:
var transactions = transactionRepository.GetTransactions();
var paginatedTransactions = new PaginatedList<Transaction>(transactions,
(int)page,
pageSize); 谢谢
发布于 2011-08-29 18:09:40
您说您的列表充满了默认值。如果你指的是default(T),那么这就是问题所在:default(T)返回null,如果T是一个引用类型。
您对ToList()的使用与此无关。这在你的代码中甚至不是必需的。以下内容是等效的:
var temp = source.Skip(PageIndex * PageSize).Take(PageSize);
this.AddRange(temp); 原因是AddRange无论如何都会枚举传递的enumerable。
https://stackoverflow.com/questions/7228606
复制相似问题