在Linq中调用Select()或GroupBy()实体是否会触发查询数据库?

时间:2010-06-22 19:55:20

标签: linq entity-framework linq-to-entities

我很难说linq中的哪些操作会导致向数据库发出SQL命令。

我知道调用ToList()或使用foreach迭代将导致查询运行但是Select和GroupBy会导致代码在数据库上执行吗?

3 个答案:

答案 0 :(得分:7)

不,如果在IQueryable而不是IEnumerable上正确调用它们,它们就会被编译为表达式,稍后会被转换为SQL。

您可以使用intellisense工具提示查看哪个是当前调用的方法。如果扩展方法的第一个参数是IEnumerable而不是IQueryable,那么您将遇到数据库查询。

答案 1 :(得分:2)

不,SelectGroupBy和大多数其他方法都不会导致数据库请求。数据库请求通常仅在您执行需要知道结果的内容时进行,例​​如,如您所述调用CountToList

为了帮助您了解何时进行数据库查询,可能有助于记录它们。然后,当您单步执行代码时,您可以看到发送查询的时间。

答案 2 :(得分:1)

不,调用Select()和GroupBy()不会命中数据库。只有在需要实际结果时(使用ToList(),ToArray(),Count()等进行枚举时)才会对数据库执行查询。