IQueryable/Linq Orderby 失败:仅对有限数量的记录进行排序
IQueryable/Linq Orderby Fail: Sorts only a limited number of records
我有一个一次处理数百条记录的应用程序,我使用以下代码对查询进行排序,但它只会对有限数量的记录进行排序和排序。
switch (sortOrder)
{
case "created":
folders = (from f in folders orderby f.created_date ascending select f);
//folders = folders.OrderBy(f => f.created_date.Value.Year)
// .ThenBy(f => f.created_date.Value.Month)
// .ThenBy(f => f.created_date.Value.Day);
break;
case "created_desc":
folders = (from f in folders orderby f.created_date descending select f);
//folders = folders.OrderByDescending(f => f.created_date.Value.Year)
// .ThenByDescending(f => f.created_date.Value.Month)
// .ThenByDescending(f => f.created_date.Value.Day);
break;
default:
folders = folders.OrderBy(f => f.folder_number);
break;
}
此外,当我多次尝试对其进行排序时:升序、降序然后再次升序,它不会通过第一次升序排序。如果这是有道理的。所以它对前 20 条左右的记录排序很好,但是当您继续向下滚动时,您会看到所有记录都没有正确排序。我试过 IQueryable 和 Linq,两者都产生相同的结果。
您在之前的 Linq 查询之上应用排序,因为您每次都在覆盖 folders
变量。相反,您应该将 folders
保留为未排序的数据源并单独保留已排序的结果,而不会覆盖 folders
.
所以不是这个:
folders = (from f in folders ...
你应该这样做:
var sortedFolders = (from f in folders ...
我有一个一次处理数百条记录的应用程序,我使用以下代码对查询进行排序,但它只会对有限数量的记录进行排序和排序。
switch (sortOrder)
{
case "created":
folders = (from f in folders orderby f.created_date ascending select f);
//folders = folders.OrderBy(f => f.created_date.Value.Year)
// .ThenBy(f => f.created_date.Value.Month)
// .ThenBy(f => f.created_date.Value.Day);
break;
case "created_desc":
folders = (from f in folders orderby f.created_date descending select f);
//folders = folders.OrderByDescending(f => f.created_date.Value.Year)
// .ThenByDescending(f => f.created_date.Value.Month)
// .ThenByDescending(f => f.created_date.Value.Day);
break;
default:
folders = folders.OrderBy(f => f.folder_number);
break;
}
此外,当我多次尝试对其进行排序时:升序、降序然后再次升序,它不会通过第一次升序排序。如果这是有道理的。所以它对前 20 条左右的记录排序很好,但是当您继续向下滚动时,您会看到所有记录都没有正确排序。我试过 IQueryable 和 Linq,两者都产生相同的结果。
您在之前的 Linq 查询之上应用排序,因为您每次都在覆盖 folders
变量。相反,您应该将 folders
保留为未排序的数据源并单独保留已排序的结果,而不会覆盖 folders
.
所以不是这个:
folders = (from f in folders ...
你应该这样做:
var sortedFolders = (from f in folders ...