我很难说linq中的哪些操作会导致向数据库发出SQL命令。
我知道调用ToList()或使用foreach迭代将导致查询运行但是Select和GroupBy会导致代码在数据库上执行吗?
答案 0 :(得分:7)
不,如果在IQueryable
而不是IEnumerable
上正确调用它们,它们就会被编译为表达式,稍后会被转换为SQL。
您可以使用intellisense工具提示查看哪个是当前调用的方法。如果扩展方法的第一个参数是IEnumerable
而不是IQueryable
,那么您将遇到数据库查询。
答案 1 :(得分:2)
不,Select
,GroupBy
和大多数其他方法都不会导致数据库请求。数据库请求通常仅在您执行需要知道结果的内容时进行,例如,如您所述调用Count
或ToList
。
为了帮助您了解何时进行数据库查询,可能有助于记录它们。然后,当您单步执行代码时,您可以看到发送查询的时间。
答案 2 :(得分:1)
不,调用Select()和GroupBy()不会命中数据库。只有在需要实际结果时(使用ToList(),ToArray(),Count()等进行枚举时)才会对数据库执行查询。