如果这样做,我会得到两项:
private int page = 0;
private int size = 2;
List<ContractTableRow> rows =
(from c in model.Contracts
join w in model.Workers on c.Worker equals w.Id
where c.Worker == w.Id
select new ContractTableRow
{
...
})
.Skip(page * size)
.Take(size)
.ToList();
如果我得到所有物品,则:
List<ContractTableRow> rows =
(from c in model.Contracts
.Skip(page * size)
.Take(size)
join w in model.Workers on c.Worker equals w.Id
where c.Worker == w.Id
select new ContractTableRow
{
...
})
.ToList();
第二个代码为什么不给出两个元素?
第一个代码的顺序是什么?首先用select
new ContractTableRow
所有元素,然后skip
,take
?还是最初是skip
,take
,然后是select
?
我需要它来创建数据库的记录的分页输出。用这种方式实现是正确的吗?
答案 0 :(得分:1)
正确的方法是,首先取消join
并使用Navigation属性,然后正确的顺序是IQueryable.OrderBy。[ThenBy。] Skip.Take.Select。而且您必须提供一个可以完全对结果进行排序的OrderBy,否则您的页面可能会有空白和重叠。
List<ContractTableRow> rows =
db.Contracts
.OrderBy( r => r.Id )
.Skip(page * size)
.Take(size)
.Select( c => new ContractTableRow
{
c.Id,
c.Worker.Name...
})
.ToList();