应该在哪里分页code去了

应该在哪里分页code去了

本文介绍了ASP.NET MVC2 LINQ - 库模式,应该在哪里分页code去了?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的工作增加了对分页的的HtmlHelper,但我不确定在哪里合适的和/或最有利的地方放分页code的某些部分从性能和可维护性的立场。

我不确定是否跳过(),以()和COUNT()的LINQ的部分,以SQL数据操作应库或控制器内生活。

我也不能确定,如果他们的订单,并在那里他们被用来影响任何性能。

如果他们生活在存储库中,从我的理解,这是它如何工作的:

1 我要传递的PageIndex和pageSize的作为参数从数据库中抓取的数据存储库的方法。

2 然后抓住完整的数据从数据库中设置的。

3 ,然后存储完整的数据在一个变量设置TOTALITEMS的计数。

4。,然后应用跳过()和Take(),这样的数据集只保留我需要的页面。

5。显示部分数据设置为在视图中的单个页面。

如果他们住在离我的理解控制器,这是它如何工作的:
1.我会抓住完整的数据从存储库设置,并将其存储到一个变量在控制器内。
2.然后得到TOTALITEMS的计数为完整的数据集。
3.然后应用跳过()和Take(),这样的数据集只保留我需要的页面。
4.显示部分数据设置为在视图中的单个页面。

控制器内(我知道我会得到不正确的页数这里,而不是TOTALITEMS):

 
字符[] = charactersToShow charactersRepository.GetCharactersByRank(this.PageIndex,this.PageSize);
RankViewModel视图模型=新RankViewModel
{
    字符= charactersToShow,
    PaginationInfo =新PaginationInfo
    {
        当前页= this.PageIndex,
        ItemsPerPage = this.PageSize,
        TOTALITEMS = charactersToShow.Count()
    }
};

在存储库:

 
公共字[] GetCharactersByRank(INT的PageIndex,诠释每页)
{
    IQueryable的字符数=(从C在db.Characters
        排序依据c.Kill降
        选择新的角色{
            CharID = c.CharID,
            CHARNAME = c.CharName,
            级别= c.Level
        });
    字符=的PageIndex> 1? characters.Skip((的PageIndex - 1)*每页)。取(每页):characters.Take(每页);
    返回characters.ToArray();
}

这code是我如何实施跳过()的部分例子,以()和count()code居住在库中。我其实没有得到落实并返回TOTALITEMS因为当时我意识到,我不知道正确的地方藏起来。

的我不能确定在哪里把这些部分原因是,我不知道LINQ到SQL如何工作的引擎盖底下,因此我不知道如何进行性能优化。我也不知道这是即使在这种情况下一个问题。

它必须抓住从数据库中的所有记录,当你做对LINQ的一个.Count之间的()到SQL?
是否有作出单独的查询,如果我做一个.Count之间的(),再后来做了.Skip()和。取()?
是否有使用.Count之间的()之前的.Skip()和。取()?任何可能的性能问题。

这是使用ORM我第一次,所以我不知道会发生什么。我知道我可以看到的LINQ to SQL运行查询,但是我觉得,听有经验的人在这种情况下会更好地利用我的时间。

我想明白这一点更深入,任何有识之士将AP preciated。


解决方案

我发现这个在的NerdDinner 网站,马尔科上面提到的,它回答了很多我的问题。

的NerdDinner 第8页的底部:

这篇关于ASP.NET MVC2 LINQ - 库模式,应该在哪里分页code去了?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-31 06:32