我需要为我的记录显示序列编号。每页50条记录。
public List<string[]> InstructionsData(IEnumerable<Assets> InstructionsEntry, int currentUserId)
{
return InstructionsEntry.Select((entry,index) => new string[]
{
(index + 1).ToString(),
entry.state_Id,
entry.batchRef_Id,
entry.assetCategory_Id,
GetAge(entry.age),
entry.assetStatus_Id,
GetStatusTag(entry.recordStatus ??false),
entry.availbaleQty.ToString(),
entry.createdBy,
}).ToList();
上面用于显示索引的代码工作正常。我的问题是当我转到下一页时,索引再次从第一个开始。请帮我继续下一页的索引号。
答案 0 :(得分:0)
简单:
public List<string[]> InstructionsData(IEnumerable<Assets> InstructionsEntry, int currentUserId, int startIndex)
{
return InstructionsEntry.Select((entry,index) => new string[]
{
(startIndex + index + 1).ToString(),
entry.state_Id,
entry.batchRef_Id,
entry.assetCategory_Id,
GetAge(entry.age),
entry.assetStatus_Id,
GetStatusTag(entry.recordStatus ??false),
entry.availbaleQty.ToString(),
entry.createdBy,
}).ToList();
答案 1 :(得分:0)
我不会争论你的设计选择,比如
你可能在幕后有非常特殊的原因,但我会试着指出我最终会做些什么来检索分页的索引结果集。
首先,获取资产的分页结果集(或您的用例场景需要的任何内容),拥有关于给定页面的一些元数据(当前页码,页面大小,总记录)
var paged = data.Page(page: 2, size: 5);
然后在前端或显示结果的任何地方,将索引附加到返回的记录(我将显示C#等价物,但您将在您的前端选择技术堆栈中轻松实现相同的结果)
var indexed = paged.Items
.Select((current, index) =>
{
var skipped = (paged.Page - 1) * paged.Size;
return new
{
Index = skipped + index,
Item = current,
};
});
其中分页结果如下所示
public class Paged<T>
{
public IEnumerable<T> Items { get; set; }
public int Page { get; set; }
public int Size { get; set; }
public int Total { get; set; }
}
public class Asset
{
public int Id { get; set; }
public string Name { get; set; }
}
虽然实际的分页机制只适用Skip
和Take
public static class Extensions
{
public static Paged<T> Page<T>(this IEnumerable<T> instance, int? page = 1, int? size = 10)
{
var items = instance
.Skip((page.Value - 1) * size.Value)
.Take(size.Value)
.ToList();
return new Paged<T>()
{
Page = page.Value,
Size = size.Value,
Total = instance.Count() - 1,
Items = items,
};
}
}
检查gist以获取概述代码示例