【发布时间】:2019-07-08 16:28:24
【问题描述】:
如果这样做,我会得到两件物品:
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?
我需要它来创建数据库记录的分页输出。这样实现对吗?
【问题讨论】:
-
您正在接受 2 个合同,然后将它们与 Worker 一起加入,因此您将获得具有这 2 个合同的所有 Worker,除非存在一对一的相关性,否则可以超过两个
-
我们无法告诉您这样做是否“正确”。在 Stack Overflow 有限的篇幅中,有很多因素无法回答。如果它有效,并且您没有发现任何性能或安全问题,那么它就是“正确”的......
-
如果您想逐页执行,请执行 Select((row, index) => new {row = row, index = index}).GroupBy(x => x.索引/大小)
-
顺序很重要。你的两个查询不一样。在第二个中,您通过
skip和take限制合同并应用其余标准
标签: c# entity-framework linq output