我有一个网络应用程序,我正在连接到一个带有 Entity Framework 的数据库。
例如,要选择特定部门的所有 Employee
记录,我可以很容易地编写:
....Employees.Where(o => o.Department == "HR").ToList();
工作正常。但这是最优的吗?
是否应将此 Where
子句合并到存储过程或 View 中?或者我的 Entity Framework 代码是否完成了将其转换为 SQL 的工作?
过去,当人们将记录提取到内存中,然后然后在 .net 中而不是在数据库级别进行过滤时,我们的团队就遇到过性能问题。我正在努力避免这种情况再次发生,所以我想清楚地知道我必须避免什么。
最佳答案
如果 Employees
由 Entity Framework 提供,则 Where()
将被翻译成 SQL 并发送到数据库。只有在具体化对象时,它才会采用您之前应用的过滤器并将它们转换为 SQL。在那之后的任何事情都只是普通的 LINQ to objects。
导致具体化发生的方法包括 .ToList()
和 .ToArray()
(还有更多,但这两个可能是最常见的)。
如果您想查看 SQL Server 上发生了什么,您应该打开 SQL 事件探查器并查看正在发送的查询。
关于c# - 在什么时候我需要将查询工作卸载到数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32427996/