c# - 我可以在 EF 中以良好的方式获取列表吗

标签 c# entity-framework entity-framework-4.1

我对 Entity Framework 还是新手。如果问题是假的,请原谅我:)
我有一个域类,它从数据库获取一些数据的列表:

public IEnumerable<Item> GetItems()
        {
            return context.Items.ToList();
        }

此代码返回数据库中的所有项目。
在网站上,我使用分页,因此每页只需要 10 个项目。
所以我做了这样的事情:

var model = itemsRepository.GetItems().
                    Where(x => x.CategoryId == categoryId).
                    OrderByDescending(x => x.CreatedOnDate).
                    Skip(0).
                    Take(pageSize);

现在,当我看到我在这里所做的事情时,我从数据库中获取所有项目并过滤它们。
如果我将新方法放入域中并放入以下代码,我会得到一些好处吗:

return context.Items.Where(x => x.CategoryId == categoryId).
                    OrderByDescending(x => x.CreatedOnDate).
                    Skip(0).
                    Take(pageSize);

最佳答案

是的。您将获得的好处是,后一种情况下的 LINQ 查询将被转换为 SQL 并在数据库中执行。因此,您的第一个示例将整个表加载到内存中 - 而第二个示例将在数据库中进行更有效的查询。

本质上,.ToList()中断延迟执行 - 但返回 IQueryable<T> 也可能有意义而不是IEnumerable<T> ,然后根据您的要求在上层进行处理。另外,请尝试阅读this question and answer .

关于c# - 我可以在 EF 中以良好的方式获取列表吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12205302/

相关文章:

entity-framework-4.1 - context.SaveChanges() 不更新 SqlServer 数据库中的数据

c# - 在自定义属性和方法之间共享数据

entity-framework - 如何详细记录我的实体错误

entity-framework - EF6 实体数据模型设计器不适用于目标框架 .net 5.0

ef-code-first - 我最好使用类还是仅使用 Entity Framework 外键的 ID?

.net - EF 4.1 + MVC + JSON 循环引用异常的最佳解决方案?

c# - 在 httppost 之后关闭模式窗口

c# - 如何知道 Azure 文件存储共享何时已被删除?

c# - 为什么 VS2010 "Lose"我的引用构建?

c# - 哪种是在 Entity Framework 中调用存储过程的最佳方法