我对 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/