0

根据下面的分析器,即使禁用了延迟加载,我的查询也需要很长时间才能返回结果:

在此处输入图像描述

这是我的查询:

在此处输入图像描述

这是我的存储库,我正在做一些荒谬的事情,只记录一条记录:

在此处输入图像描述


问题:


  1. 有人能告诉我,100 条记录并尽快返回它们的正确程序是什么,这样用户就不必等待很长时间(在使用工作单元/存储库模式时)?

  2. EF 如何知道如何将此信息分页到网格中,以便用户可以使用下一批 100 条记录,以及下一批,等等?

我不明白我是否有 .Take(1) 为什么分析器返回 73,722 行?

4

1 回答 1

3

dbSet.ToList()正在执行 LINQ-to-Entities 查询(它说“请将整个表从数据库加载到内存中”),而不是您的Take(1). 这适用于已加载的结果,而不是数据库查询。

您只需要更改顺序:

dbSet.Take(1).ToList()

这将只查询数据库中的一个元素(TOP 1在 SQL 中使用)。要获取下一个分页记录,您可以使用Skip(连同Take),例如:

public IEnumerable<T> GetPage(int pageNumber, int entitiesPerPage)
{
    return dbSet
        .Skip((pageNumber - 1) * entitiesPerPage)
        .Take(entitiesPerPage)
        .ToList();
}
于 2012-11-06T00:10:04.777 回答