linq:如何从最后一个ID获取排序记录

时间:2014-07-23 14:22:29

标签: asp.net-mvc linq entity-framework linq-to-objects

我有下表,

ItemTable, 

Col1 : ItemID(int)
Col2 : MRP(Decimal)

对于我需要一次传递选定数量的项目的应用程序之一,他们会向我发送传递给他们的lastId,最初的要求是传递最新的项目,我能够使用它以下查询,

var itemList = itemRepository.AsQueryable()
             .Where(r => r.ProductID == productID && r.IsActive == true && r.ItemID< lastId)                                            
             .OrderByDescending(r => r.ItemID)
             .Take(numberOfItems)
             .ToList(); 

然而现在添加了一个排序选项,这是MRP列,虽然我只有最后一个ID,但我怎么能得到这个?我尝试了以下查询,没有运气。

var itemList = itemRepository.AsQueryable()
                 .Where(r => r.ProductID == productID && r.IsActive == true && r.ItemID< lastId)                                            
                 .OrderByDescending(r => r.ItemID)
                 .OrderBy(r => r.MRP)
                 .Take(numberOfItems)
                 .ToList(); 

更新:工作代码

根据CamperWill的建议,我更新了我的代码并且使用了skip。

var itemList = itemRepository.AsQueryable()
                     .Where(r => r.ProductID == productID && r.IsActive == true)
                     .OrderBy(r => r.MRP)
                     .Skip(pageNumber * numberOfItems)
                     .Take(numberOfItems)
                     .ToList(); 

1 个答案:

答案 0 :(得分:2)

如果您按其他字段(MRP)排序,

LastID将无法帮助您进行分页。另外,如上面的评论中所示,通过添加第二个排序有效地忽略了第一个排序。

您可以考虑跟踪请求的页码,并使用Skip()扩展名。

// input parameter 'page'
var itemList = itemRepository.AsQueryable()
    .Where(r => r.ProductID == productID && r.IsActive == true)       
    .OrderBy(r => r.MRP)
    .Skip( (page-1)*numberOfItems )
    .Take(numberOfItems)
    .ToList();