我正在开发一个ASP.NET MVC应用程序,我们必须编写自己的分页代码。 我看到元素在不同的页面上重复出现。发生这种情况是因为IQueryable中元素的顺序随机变化,并且必须为每个页面查询数据库。 我通过按创建日期排序元素然后按我想要的顺序来解决这个问题。但我感觉很沉重。有没有更好的方法来解决这个问题。
答案 0 :(得分:1)
如果您通过IQuerable从数据库中获取行并在一列上进行排序,如果该列中的行具有相同的值,那么这些行的顺序可能会有所不同,您需要像现在一样执行,即顺序通过两列,首先是你真正感兴趣的那一列,然后是第二列(比如日期),因为在数据库中完成排序,所以不应该有那么大的性能。
但需要做的是指定这样的顺序:
Context.Products
.Where(p => p.ProductID > 100)
.OrderBy(p => p.CategoryID)
.ThenBy(p => p.Date).ToList();
注意ThenBy,它将生成正确的SQL。
答案 1 :(得分:1)
不,这是正确的方法。如果您没有通过某种方式告诉它按顺序排序,数据库可能会以非确定的顺序返回行。
答案 2 :(得分:0)
看看Bill Wagner的http://srtsolutions.com/blogs/billwagner/archive/2006/10/14/paging-output-with-linq2sql.aspx。
他使用Take()和Skip()来创建分页输出。