C# 无法添加到IPagedList对象或传输列表<;T>;到IPagedList<;T>;

C# 无法添加到IPagedList对象或传输列表<;T>;到IPagedList<;T>;,c#,.net,asp.net-mvc,asp.net-mvc-3,pagedlist,C#,.net,Asp.net Mvc,Asp.net Mvc 3,Pagedlist,我正在使用ASP MVC插件将分页添加到我的视图中,因为我的视图模型包含一个列表,该列表在某个时候有点失控。然而,我遇到了一些问题 视图模型包含另一个模型对象的列表。如果我对数据库进行一次查询,我可以将此列表的数据类型从list更改为IPagedList,然后只需按照文档从查询中加载列表,如下所示: 查看模型 public IPagedList<ZipCodeTerritory> zipCodeTerritory { get; set; } public IPagedList&

我正在使用ASP MVC插件将分页添加到我的视图中,因为我的视图模型包含一个列表,该列表在某个时候有点失控。然而,我遇到了一些问题

  • 视图模型包含另一个模型对象的
    列表。如果我对数据库进行一次查询,我可以将此列表的数据类型从
    list
    更改为
    IPagedList
    ,然后只需按照文档从查询中加载列表,如下所示:
查看模型

public IPagedList<ZipCodeTerritory> zipCodeTerritory { get; set; }
public IPagedList<ZipCodeTerritory> zipCodeTerritory { get; set; }
    public IPagedList<ZipCodeTerritory> pagedTerritoryList { get; set; }
    public List<ZipCodeTerritory> zipCodeTerritory { get; set; }
  • 然而,这带来了几个问题。首先,我无法使用C#
    列表
    使用的
    .clear
    方法。第二,也是更重要的一点,如果我需要执行一个不同的搜索,在那里我多次点击数据库并将每个查询的结果添加到
    zipCodeTerritory
    列表中,我无法调用
    .addRange()
    方法。是否有人知道如何将项目添加到
    IPagedList
查看模型

public IPagedList<ZipCodeTerritory> zipCodeTerritory { get; set; }
public IPagedList<ZipCodeTerritory> zipCodeTerritory { get; set; }
    public IPagedList<ZipCodeTerritory> pagedTerritoryList { get; set; }
    public List<ZipCodeTerritory> zipCodeTerritory { get; set; }
控制器

search.zipCodeTerritory = (from z in db.ZipCodeTerritory
                          where z.StateCode.Equals(search.searchState) &&
                                z.EffectiveDate >= effectiveDate
                         select z).ToList().ToPagedList(pageNumber, pageSize);

//This works but this only covers one of the three different searches that are 
//possibly from this Index page
foreach (var zip in zipArray)
{
    var item = from   z in db.ZipCodeTerritory
                where  z.ZipCode.Equals(zip) &&
                        z.EffectiveDate >= effectiveDate &&
                        z.IndDistrnId.Equals(search.searchTerritory) &&
                        z.StateCode.Equals(search.searchState)
                select z;
    search.zipCodeTerritory.AddRange(item); //This line throws the following exception:

    //PagedList.IPagedList<Monet.Models.ZipCodeTerritory>' does not contain a 
    //definition for 'AddRange' and no extension method 'AddRange' accepting a first 
    //argument of type 'PagedList.IPagedList<Monet.Models.ZipCodeTerritory>' could be 
    //found (are you missing a using directive or an assembly reference?)
} 
search.pagedTerritoryList = (IPagedList<ZipCodeTerritory>)search.zipCodeTerritory;

//This threw the following exception at runtime: 
//Unable to cast object of type  
//System.Collections.Generic.List'1[Monet.Models.ZipCodeTerritory]' to type 
//'PagedList.IPagedList'1[Monet.Models.ZipCodeTerritory]'.
search.pagedTerritoryList=(IPagedList)search.zipCodeTerritory;
//这在运行时引发了以下异常:
//无法强制转换类型为的对象
//System.Collections.Generic.List'1[Monet.Models.ZipCodeTerritory]'以键入
//'PagedList.IPagedList'1[Monet.Models.ZipCodeTerritory]'。

要将各种方法结合在一起,您可能应该这样做(基于第一个示例):


您的问题是什么?当您查询数据时,是否要再次在第0页重新启动?如果是这样,为什么不使用第一步中概述的方法将其放入
列表中(如果需要,包括附录),然后执行
.ToPagedList()
最后呼叫?@msmucker0527:想知道是否有人知道如何将项目添加到
IPagedList
或将通用
列表
转换到
IPagedList
@GalacticCowboy:问题是在另一次搜索中,我需要将项目添加到
IPagedList
,而且
IPagedList
没有我找到的
.addRange()
方法或任何其他方法来增量添加项目。@NealR-对,在完成之前不要将其转换为IPagedList。为列表创建一个本地临时变量,将range()添加到心形内容中,准备好后再添加ToPagedList()。由于您正在枚举
mySearch
,实际上您正在剥离PagedList提供的分页功能。通过调用
ToList()
您可以创建
ToPagedList()
毫无意义,因为数据库已经返回了所有记录,只在@odys上面提到的内存中分页。因此,如果查询返回100万条记录,则返回所有100万条记录,然后在内存中分页,而不是由数据库分页。因此,如果页面大小为10,则表示仅返回10条,而不是100万条。@Lankymart我将修复它。ToList()来自OP@Lankymart嗯。。。我会留下我的编辑,但看看OP到底想做什么,要比这复杂得多。