问题描述
我的工作增加了对分页的的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去了?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!