2009-12-15 16 views
0

我正在开发一个ASP.NET MVC应用程序,我们必须编写自己的分页代码。 而且我看到元素在不同的页面上重复。发生这种情况是因为IQueryable中元素的顺序随机变化,必须为每个页面查询数据库。 我通过按照创建日期排序元素,然后按我想要的顺序来解决此问题。但我感觉它很重。有没有更好的方法来解决这个问题。元素的顺序在IQueryable中有所不同,每当我用相同的条件查询时

回答

1

如果您通过IQuerable从数据库中获取行并在一列上进行排序,如果在该列中具有相同值的行的顺序可能会有所不同,那么您需要按照现在的方式进行操作,即按两列排序,首先是你真正感兴趣的那一列,然后是第二列(如日期),因为排序是在数据库中完成的,所以不应该有那么大的性能影响。

但是需要做的是指定如下排序:

Context.Products 
    .Where(p => p.ProductID > 100) 
    .OrderBy(p => p.CategoryID) 
    .ThenBy(p => p.Date).ToList(); 

通知的ThenBy,将产生正确的SQL。

+0

它有什么不同,如果我写.OrderBy(p => p.CategoryID) .OrderBy(p => p.Date).ToList()? – San 2009-12-15 07:58:19

+0

因为那么你通过categoryId来排列列表,然后再按日期排序,第一个排序(按类别)不会生效,列表将按日期排序。 ordernig类别的唯一影响是具有相同日期的项目将按id排序,因此实际上应该相当于执行OrderBy(p => p.Date)。ThenBy(p => p.CategoryID)但不是肯定的是,这取决于OrderBy函数的实现。 – Torkel 2009-12-16 19:10:55

1

不,这是正确的方法。如果您不告诉它按某种顺序排列,数据库可能会以非确定性顺序返回行。

相关问题