运行 linq 总计:将结果放在分页列表中

running total by linq : place results in paged List

我尝试将以下 link 的结果放入分页列表中:

LINQ to SQL and a running total on ordered results

我稍微修改一下代码:

var userDocs = db.Docs.AsQueryable();

Int64 running_total = 0;
var moeen = userDocs.ToList()
                       .OrderBy(a => a.DocDate)
                       .Select(a =>
                                   {
                                       running_total += 1;
                                       return new MoeenViewModel
                                       {
                                           Doc = a,
                                           remain = running_total
                                       };
                                   }
                              );

return View(moeen.ToPagedList(1, 15));

但 'remain' 结果不以 1 开头。它以 8 开头,例如如果 'Docs' 记录计数为 7

为什么??? !!!

如果我 return View(moeen) 结果正常

我发现问题

var userDocs = db.Docs.AsQueryable();

Int64 running_total = 0;
var moeen = userDocs.ToList()
                       .OrderBy(a => a.DocDate)
                       .Select(a =>
                                   {
                                       running_total += 1;
                                       return new MoeenViewModel
                                       {
                                           Doc = a,
                                           remain = running_total
                                       };
                                   }
                              );
moeen = moeen.ToList();
return View(moeen.ToPagedList(1, 15));

在通过 .ToList() 列出 moeen 之前,每次使用 moeen 都会对 running_total 产生副作用。

看这个: http://www.blackwasp.co.uk/LinqRunningTotal.aspx

if you change the value of the variable that has been closed over before executing the query, the results will be affected.