首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IQueryable混淆

IQueryable混淆
EN

Stack Overflow用户
提问于 2011-08-29 17:56:42
回答 1查看 321关注 0票数 2

我有一个关于IQueriable的问题。也许我的理解是错误的,但我认为调用ToList()会强制执行查询。我有一个想要使用IQuerriable填充的PaginatedList类,但是当我这样做时,我得到了一系列空对象。谁能告诉我我哪里做错了。

代码语言:javascript
复制
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的帮助,将不胜感激。

该列表的填充方式如下:

代码语言:javascript
复制
 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);  
    }

我在这里创建我的分页列表:

代码语言:javascript
复制
var transactions = transactionRepository.GetTransactions();  
var paginatedTransactions = new PaginatedList<Transaction>(transactions,
                                                           (int)page,
                                                           pageSize);  

谢谢

EN

回答 1

Stack Overflow用户

发布于 2011-08-29 18:09:40

您说您的列表充满了默认值。如果你指的是default(T),那么这就是问题所在:default(T)返回null,如果T是一个引用类型。

您对ToList()的使用与此无关。这在你的代码中甚至不是必需的。以下内容是等效的:

代码语言:javascript
复制
var temp = source.Skip(PageIndex * PageSize).Take(PageSize);
this.AddRange(temp);  

原因是AddRange无论如何都会枚举传递的enumerable。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7228606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档